码迷,mamicode.com
首页 > 其他好文 > 详细

Animation初探(二)

时间:2015-04-28 01:37:31      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:

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对映的透明度。

  太晚了,坑先挖到这儿。

Animation初探(二)

标签:

原文地址:http://www.cnblogs.com/fishbone-lsy/p/4461778.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!