关闭

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

标签: 补间动画渐变动画AlphaAnimation
1361人阅读 评论(0) 收藏 举报
分类:
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的透明度,达到渐变动画的效果。
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
    final float alpha = mFromAlpha;
    t.setAlpha(alpha + ((mToAlpha - alpha) * interpolatedTime));
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:125787次
    • 积分:1917
    • 等级:
    • 排名:千里之外
    • 原创:66篇
    • 转载:0篇
    • 译文:0篇
    • 评论:28条
    最新评论