标签:
AlphaAnimation是透明度变换动画。它是Animation的子类,Animation太大了,后面再说,先来看看AlphaAnimation。
一、AlphaAnimation有两个属性:
private float mFromAlpha; private float mToAlpha;
一看就明白,从mFromAlpha变化到mToAlpha。其实AlphaAnimation的构造方法也就是设置这两个函数。
二、AlphaAnimation的构造方法:
1)
/** * Constructor used when an AlphaAnimation is loaded from a resource. * * @param context Application context to use * @param attrs Attribute set from which to read values */ public AlphaAnimation(Context context, AttributeSet attrs) { super(context, attrs); TypedArray a = context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.AlphaAnimation); mFromAlpha = a.getFloat(com.android.internal.R.styleable.AlphaAnimation_fromAlpha, 1.0f); mToAlpha = a.getFloat(com.android.internal.R.styleable.AlphaAnimation_toAlpha, 1.0f); a.recycle(); }
这个构造函数有两个输入参数,一个是上下文,一个是组件的设定参数。这个设定参数一来源于xml文件的配置,然后用TypedArray里面的方法把xml里面设定好的参数取出来,并给属性赋值。可以看见,如果我没有配置xml,mFromAlpha和mToAlpha就会取默认值1.0f,相当于新建了一个没有任何变化的动画。
2)
/** * Constructor to use when building an AlphaAnimation from code * * @param fromAlpha Starting alpha value for the animation, where 1.0 means * fully opaque and 0.0 means fully transparent. * @param toAlpha Ending alpha value for the animation. */ public AlphaAnimation(float fromAlpha, float toAlpha) { mFromAlpha = fromAlpha; mToAlpha = toAlpha; }
这是AlphaAnimation的另一个构造方法。这个更易懂,就是直接对mFromAlpha和mToAlpha赋值。
三、AlphaAnimation的其他方法。
1、applyTransformation:
/** * Changes the alpha property of the supplied {@link Transformation} */ @Override protected void applyTransformation(float interpolatedTime, Transformation t) { final float alpha = mFromAlpha; t.setAlpha(alpha + ((mToAlpha - alpha) * interpolatedTime)); }
可见applyTransformation()方法就是动画具体的实现,系统会以一个比较高的频率来调用这个方法,我测试时调用频率大概为40+FPS。
我们可以继承AlphaAnimation这个类并重写applyTransformation()这个方法,如果说,动画是一条横轴为时间,纵轴为透明度的函数,默认情况这个函数是一条直线,我们可以设置其中对映的计算公试。系统每秒会取几十个interpolatedTime的值,我们可以自己列出一个公式计算每个interpolatedTime对映的透明度。
太晚了,坑先挖到这儿。
标签:
原文地址:http://www.cnblogs.com/fishbone-lsy/p/4461778.html