补间动画详解二 渐变动画AlphaAnimation

来源:互联网 发布:js中match函数 编辑:程序博客网 时间:2024/05/01 12:34
AlphaAnimation通过修改alpha属性,改变View的透明度,达到渐变的动画效果。

AlphaAnimation类官方文档:
https://developer.android.com/reference/android/view/animation/AlphaAnimation.html

关于父类Animation的详解可参考文章:
http://blog.csdn.net/ruancoder/article/details/52347243

一、AlphaAnimation的使用
(1).使用xml文件创建AlphaAnimation
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"     android:duration="3000">    <alpha        android:fromAlpha="0.0"        android:toAlpha="1.0"/></set>

AlphaAnimation animation = AnimationUtils.loadAnimation(context, R.anim.alpha);view.startAnimation(animation);

(2).使用java代码创建AlphaAnimation
AlphaAnimation animation = new AlphaAnimation(0.0f, 1.0f);animation.setDuration(3000);view.startAnimation(animation);

二、AlphaAnimation的分析
AlphaAnimation继承自Animation,除了拥有父类的成员变量外,添加了mFromAlpha和mToAlpha。取值范围0.0~1.0,0.0是完全透明,1.0完全不透明。
public class AlphaAnimation extends Animation {    /** 动画开始时的透明度,取值范围0.0~1.0 */    private float mFromAlpha;    /** 动画结束时的透明度,取值范围0.0~1.0 */    private float mToAlpha;}

当使用java代码的方式创建AlphaAnimation时,使用如下构造方法,分别传入fromAlpha和toAlpha。
public AlphaAnimation(float fromAlpha, float toAlpha) {    mFromAlpha = fromAlpha;    mToAlpha = toAlpha;}

当使用xml文件的方式创建AlphaAnimation时,由AnimationUtils工具类加载动画文件,使用如下构造方法,通过xml中的属性android:fromAlpha和android:toAlpha来获取属性值。
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();}

AlphaAnimation的核心是重写父类Animation的applyTransformation()方法。
在动画从开始倒结束的过程中,参数interpolatedTime从0.0递增到1.0,通过计算mFromAlpha + ((mToAlpha - mFromAlpha) * interpolatedTime)的值,来不断的修改View的透明度,达到渐变动画的效果。
@Overrideprotected void applyTransformation(float interpolatedTime, Transformation t) {    final float alpha = mFromAlpha;    t.setAlpha(alpha + ((mToAlpha - alpha) * interpolatedTime));}

0 0
原创粉丝点击