Android 属性动画进阶总结篇(篇4)

前言:学习了郭霖大神的 属性动画高级用法相关的博客,在学习的同时也顺便做笔记
1.在文章的开始首先贴上郭霖 大神关于 属性动画高级用法相关的博客地址:

http://blog.csdn.net/sinyu890807/article/details/44171115

2.总结下所学习的技术点:

在篇2博文中记录了系统提供的一部分 “时间差值器”, 这里再深入学习下:

  1. 系统默认的时间差值器 为 AccelerateDecelerateInterpolator这一实现类,看下面源码截图

    这里写图片描述

  2. 系统提供的属性动画的各类差值器中都继承自BaseInterpolator类,而BaseInterpolator类实现于Interpolator接口,Interpolator接口继承自TimeInterpolator接口(targetSdkVersion 23) , 就是这么一系列的继承实现关系,可以看到在TimeInterpolator接口中只有 “getInterpolation”这个方法,在系统提供的各类差值器中皆有对该 “getInterpolation”方法 不同的实现,当系统提供的不满足需求的时候,可以实现自定义的差值器.

  3. 差值器的自定义实现可以参考郭神 的博客,绝对让你受宠若惊!!

  4. TimeInterpolator(时间差值器)根据流逝的时长百分比计算出当前属性值改变的百分比,而 篇3 学到的TypeEvaluator(类型估值算法,即估值器)则根据时间差值器计算得到的属性百分比来计算当前属性改变的值并且返回, 主要的api有

    
        /**
         * 系统提供的时间差值器,自定义差值器可以实现Interpolator 或 TimeInterpolator,
         * 重写其getInterpolation方法
         */
        public class LinearInterpolator extends BaseInterpolator implements NativeInterpolatorFactory {
    
            public LinearInterpolator() {
            }
    
            public LinearInterpolator(Context context, AttributeSet attrs) {
            }
    
            public float getInterpolation(float input) {
                return input;
            }
    
            /** @hide */
            @Override
            public long createNativeInterpolator() {
                return NativeInterpolatorFactoryHelper.createLinearInterpolator();
            }
        }
    
    
    
        /**
         * 系统提供的估值器,自定义估值器可以实现TypeEvaluator,重写其evaluate方法
         */
        public class IntEvaluator implements TypeEvaluator<Integer> {
    
        public Integer evaluate(float fraction, Integer startValue, Integer endValue) {
            int startInt = startValue;
            return (int)(startInt + fraction * (endValue - startInt));
        }
    }
    
    
    

关于属性动画ViewPropertyAnimator的用法

由于大多数时候仍然是对View进行动画操作的,所以为了更加简便灵活的实现动画,ViewPropertyAnimator可以帮我们一行代码简单实现,看下我们之前实现动画的写法:

ObjectAnimator translationX = ObjectAnimator.ofFloat(view, "translationX", 0, 500F);
translationX.setInterpolator(new AccelerateDecelerateInterpolator());
translationX.setDuration(300);
translationX.start();

上面的code虽在api的展示上已经非常简洁,是不是并不好理解,再看下下面的代码,实现的动画效果和上面一样:

 ViewPropertyAnimator.animate(view).translationX(500)
                     .setInterpolator(new AccelerateDecelerateInterpolator())
                     .setDuration(300);

上面的code在展示上更加简洁,而且非常容易理解,animate方法需要传入一个View对象,然后返回ViewPropertyAnimator对象,紧接着对ViewPropertyAnimator对象 进行动画效果/时间差值器/动画执行时长/等等的设置,每个api的返回结果都是ViewPropertyAnimator 对象,设置完成之后也不用start动画,系统会帮我们隐式启动动画. 就是这么的爽歪歪…

可以使用连缀的写法将动画集合起来,动画效果同时执行

     ViewPropertyAnimator.animate(null).x(100).y(100)
                         .rotation(200).alpha(0)
                         .setDuration(100);
3.总结:
  • 1.了解属性动画差值器,以及差值器和估值器的用处以及如何协同工作;
  • 2.了解ViewPropertyAnimator的用法,简洁易懂;
  • 3.假期结束的第1天,时间差还没回过神来 …郁闷

属性动画类别的的博文:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值