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

第一种: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。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值