美文网首页
Android属性动画的三种使用方式

Android属性动画的三种使用方式

作者: 我吃大西瓜QAQ | 来源:发表于2019-03-27 17:50 被阅读0次

    第一种:ViewPropertyAnimator

    专门针对view设计的,使用简单操作方便,但是不易于扩展

    使用方式:
    view
    .animate()
    .scale(1)
    .translationX(300)
    .setDuration(2000)
    .start();
    

    第二种:ObjectAnimator

    继承自ValueAnimator
    实际上是通过调用view里面的setter()方法来更新参数值,例如下面的alpha实际上是调用的view里面的setAlpha()方法来更新值

    使用方式
    旋转 rotationrotationXrotationY
    • rotationX:表示围绕 X 轴旋转,rotationX 表示旋转度数
    • rotationY:表示围绕 Y 轴旋转,rotationY 表示旋转度数
    • rotation:表示围绕 Z 旋转,rotation 表示旋转度数
    移动 translationXtranslationY
    • translationX :表示在 X 轴上的平移距离,以当前控件为原点,向右为正方向,参数 translationX 表示移动的距离。
    • translationY :表示在 Y 轴上的平移距离,以当前控件为原点,向下为正方向,参数 translationY 表示移动的距离。
    缩放 scaleXscaleY
    • scaleX:在 X 轴上缩放,scaleX 表示缩放倍数
    • scaleY:在 Y 轴上缩放,scaleY 表示缩放倍数
    透明度 alpha
    • alpha:改变透明度 范围:0-1
    • 1:不透明 0:完全透明
    ObjectAnimator animator = ObjectAnimator.ofFloat(view,"alpha",1,0,1);
    animator.setDuration(2000);  
    animator.start(); 
    

    第三种方式: ValueAnimator

    • ValueAnimator 是 ObjectAnimator 的父类,实际上,ValueAnimator 就是一个不能指定目标对象版本的 ObjectAnimator。
    • 无法指定view对象,而是通过自身不断变化的值,自己手动去调用某个view的setter()方法来变化参数值
    • 适用于第三方库控件里面属性没有对应的setter / getter 方法的时候,会需要用到它
    使用方式:
    ValueAnimator animator = ValueAnimator.ofInt(0,400);//创建一个值从0到400的动画
    animator.setDuration(1000);//动画时长为1s
    
    animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            int curValue = (int)animation.getAnimatedValue();
            tv.layout(curValue,curValue,curValue+tv.getWidth(),curValue+tv.getHeight());  
        }
    });
    
    

    三种方式的区别:

    • ViewPropertyAnimator、ObjectAnimator、ValueAnimator 这三种 Animator,它们其实是一种递进的关系:从左到右依次变得更加难用,也更加灵活。
    • 它们的性能是一样的,因为 ViewPropertyAnimator 和 ObjectAnimator 的内部实现其实都是 ValueAnimator,ObjectAnimator 更是本来就是 ValueAnimator 的子类,它们三个的性能并没有差别。它们的差别只是使用的便捷性以及功能的灵活性。所以在实际使用时候的选择,只要遵循一个原则就行:尽量用简单的。能用 View.animate() 实现就不用 ObjectAnimator,能用 ObjectAnimator 就不用 ValueAnimator。

    相关文章

      网友评论

          本文标题:Android属性动画的三种使用方式

          本文链接:https://www.haomeiwen.com/subject/portbqtx.html