欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android ViewPropertyAnimator:让动画变得简单起来!

程序员文章站 2022-03-02 20:25:19
...

官网地址: https://developer.android.com/reference/android/view/ViewPropertyAnimator.html

###ViewPropertyAnimator的优势: 当一个View的几个属性并行执行动画时,ViewPropertyAnimator提供了一种更简单的实现方式。ViewPropertyAnimator是在3.1系统中加入的,ViewPropertyAnimator跟ObjectAnimator很像,也能改变View的实际值,但是ViewPropertyAnimator只能作用于View而不能作用于其他object 。假如需要同时对多个属性执行动画时,ViewPropertyAnimator效率更高,代码更简洁、更易读。

常用方法 备注
translationX(float value)、translationY(float value) translationX、translationY分别为向X、Y轴的移动value的距离
x(float value)、y(float value) 如x(valueX)、y(valueY):将目标View移动到(valueX,valueY)的坐标点上
alpha() 设置View的透明度
rotation() 旋转View
scaleX(float value)、scaleY(float value) 设置View的放缩,value是倍数,如设置scaleX(2f)是View在X轴方向放大2倍,scaleY同理
setDuration(long duration) 设置动画持续时间
setStartDelay(long startDelay) 动画开始之前的延迟时间
setListener(Animator.AnimatorListener listener) 动画监听
setInterpolator(TimeInterpolator interpolator) 时间插值器,用来修饰动画效果
setUpdateListener(ValueAnimator.AnimatorUpdateListener listener) API 19或以上使用 动画更新回调
withStartAction(Runnable runnable) 动画开始时设置的行为
withEndAction(Runnable runnable) 动画结束时设置的行为

###ViewPropertyAnimator和ObjectAnimator使用对比

先看效果图:

如上图中的效果,将View移动到(500f,500f)坐标,分别使用ViewPropertyAnimator和ObjectAnimator来实现:

1、多个ObjectAnimator 组合:

ObjectAnimator animX = ObjectAnimator.ofFloat(myView, "x", 500f);
ObjectAnimator animY = ObjectAnimator.ofFloat(myView, "y", 500f);
AnimatorSet animSetXY = new AnimatorSet();
animSetXY.playTogether(animX, animY);
animSetXY.start();
复制代码

2、或者使用一个ObjectAnimator+PropertyValuesHolder :

PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("x", 500f);
PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("y", 500f);
ObjectAnimator.ofPropertyValuesHolder(myView, pvhX, pvyY).start();
复制代码

3、使用ViewPropertyAnimator:

myView.animate().x(500f).y(500f).start();
复制代码

可见在特定情况下使用ViewPropertyAnimator可以大大简化了代码量和可阅读性。

转载于:https://juejin.im/post/5a33e7ab51882549a746463e