Android ViewPropertyAnimator:让动画

作者: 饱醉豚我去年买了个表 | 来源:发表于2017-04-26 17:30 被阅读464次

官网地址:
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使用对比

先看效果图:

GIF.gif

如上图中的效果,将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可以大大简化了代码量和可阅读性。

相关文章

网友评论

  • 48d1f73337f3:那怎么用ViewPropertyAnimator 达到让一个VIew的alpha 从0.6f---1.0f呢?

本文标题:Android ViewPropertyAnimator:让动画

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