欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android View分析(五)—— 动画介绍

程序员文章站 2024-03-26 08:21:23
...

动画分为三种

1、传统的平移类动画

只是改变控件的视觉效果,但是实际位置没有变动,主要使用的类是TranslateAnimation(平移)、ScaleAnimation(缩放)、RotateAnimation(旋转)、AlphaAnimation(透明度)

2、帧动画

多张图片播放,这种需要控制图片的大小,不然容易oom

3、属性动画

3.1 ObjectAnimator动画

改变整体控件的位置,类似于传统的平移动画效果,继承ValueAnimator类,对他的封装,主要使用ObjectAnimator类,使用时传入对应的参数即可修改,参数包括translationX、translationY、scaleX、scaleY、rotate、alpha。

ObjectAnimator animator = new ObjectAnimator(view,"translationX",0,1);

3.2 ValueAnimator动画

可以改变控件的某一个属性,比如可以修改控件的高,设置逐渐变高等效果。这个又涉及两个重要的类
插值器TimeInterpolator:控制动画运行的规律,主要是时间的控制,
比如匀速LinearInterpolator、动画加速AccelearteInterpolator、最后阶段弹球效果BounceInterpolator、周期运动CycleInterpolator、先加速在减速AccelerateDecelerateInterpolator
实现:实现TimeInterpolator接口,重写getInterpolation()方法,在里面实现我们想要的效果
下面的就是和系统的LinearInterpolator一样的效果

public class MyLinearInterpolator implements TimeInterpolator {
    	@Override
    	public float getInterpolation(float input) {
        	return input;//这里面设置input*0.1表示只能完成总体效果的10%,input*20表示能完成2000%的效果,也就是如果画圆,前者只能画36度,后者可以画7200度,这部分的原理是因为估值器的fraction就是根据这个方法获取的值
    	}
}

估值器TypeEvaluator:控制动画的轨迹,某一刻的的最终效果
实现:实现TypeEvaluator接口,重写evaluate()方法

public class MyTypeEvluator implements TypeEvaluator<Float> {
    /**
     * fraction:表示动画完成度,据此计算当前动画的值
     * startValue:动画初始值
     * endValue:动画结束值
     * @return
     */
    @Override
    public Float evaluate(float fraction, Float startValue, Float endValue) {
        Float startInt = startValue;
        return (startInt+fraction*(endValue-startValue))*0.2f; //设置只能达到设置效果的20%
    }
}

PropertyValuesHolder:用来封装用户传入的属性和属性值