Android的View动画笔记

View动画分为4类

平移 旋转 缩放 透明度

View动画都是继承自android.view.animation.Animation(属性动画是在Animator包下),四类View动画对应4个Java类,TranslateAnimation RotateAnimation ScaleAnimation AphlaAnimation。

View动画的原理,可以通过看源码分析了解,入口可以从View的startAnimation方法进入,可以发现最终会调用Animaton类的
protected void applyTransformation(float interpolatedTime,
Transformation t)

方法说明:
第一个参数为动画的进度时间值,取值范围为[0.0f,1.0f],注意, interpolatedTime是已经通过时间插值器处理后的,
第二个参数Transformation记录着动画某一帧中变形的原始数据。该方法在动画的每一帧显示过程中都会被调用。

这点可以从Animation类中的public boolean getTransformation(long currentTime, Transformation outTransformation)
方法内可看到,方法中如下关键代码:

        if (duration != 0) {
            normalizedTime = ((float) (currentTime - (mStartTime + startOffset))) /
                    (float) duration;
        } else {
            // time is a step-change with a zero duration
            normalizedTime = currentTime < mStartTime ? 0.0f : 1.0f;
        }

先按线性计算时间的消耗比例,即normalizedTime,此值是线形的,然后通过时间插值器换算成非线性的值,代码片段如下:

            final float interpolatedTime = mInterpolator.getInterpolation(normalizedTime);
            applyTransformation(interpolatedTime, outTransformation);

Animation类中的applyTransformation方法是空实现,各个派生类,例如上面说到的4类动画会去重载实现该方法,来实现动画值的变化。

以AphlaAnimation类的applyTransformation方法为例:

    protected void applyTransformation(float interpolatedTime, Transformation t) {
        final float alpha = mFromAlpha;
        t.setAlpha(alpha + ((mToAlpha - alpha) * interpolatedTime));
    }

可见applyTransformation()方法就是动画具体的实现,系统会以一个比较高的频率来调用这个方法,一般情况下60FPS,是一个非常流畅的画面了,也就是16ms,所以,我们可以重载这个方法,来实现我们自己的动画。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值