Android动画|Android动画-属性动画-ViewPropertyAnimator

原文地址 http://blog.csdn.net/qq_25806863/article/details/70229687
想想之前使用组合动画的时候,是不是这样的:

ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(btnShow, "translationX", 0, 300); ObjectAnimator objectAnimator1 = ObjectAnimator.ofFloat(btnShow, "rotation", 0, 360); AnimatorSet animatorSet = new AnimatorSet(); animatorSet.setDuration(2000); animatorSet.play(objectAnimator).with(objectAnimator1); animatorSet.start();

或者这样的:
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(btnShow, "translationX", 0, 300); ObjectAnimator objectAnimator1 = ObjectAnimator.ofFloat(btnShow, "rotation", 0, 360); AnimatorSet animatorSet = new AnimatorSet(); animatorSet.setDuration(2000); animatorSet.playTogether(objectAnimator,objectAnimator1); animatorSet.start();

【Android动画|Android动画-属性动画-ViewPropertyAnimator】达到的效果是:
Android动画|Android动画-属性动画-ViewPropertyAnimator
文章图片

初见 然而,还能用下面的方法实现这个效果:
btnShow.animate() .setDuration(2000) .translationX(300) .rotation(360) .start();

简单了很多有没有 !
概述 平常所做的动画大部分是针对View的,而View经常会需要集中动画混合在一起做,因此提供了一个ViewPropertyAnimator类来快速的实现多个动画的混合。
ViewPropertyAnimator对同时进行多个动画进行了性能优化,虽然有多个动画同时进行,但是一次只刷新一次ui,不会让每个动画都去刷新ui。而且很明显他的写法非常简单。
获取ViewPropertyAnimator 只能通过View.animate()获取ViewPropertyAnimator。
常用方法 这里把能链式调用的全列举出来,感受一下他的方便之处:
btnShow.animate() .setDuration(5000) //透明度 .alpha(0) .alphaBy(0) //旋转 .rotation(360) .rotationBy(360) .rotationX(360) .rotationXBy(360) .rotationY(360) .rotationYBy(360) //缩放 .scaleX(1) .scaleXBy(1) .scaleY(1) .scaleYBy(1) //平移 .translationX(100) .translationXBy(100) .translationY(100) .translationYBy(100) .translationZ(100) .translationZBy(100) //更改在屏幕上的坐标 .x(10) .xBy(10) .y(10) .yBy(10) .z(10) .zBy(10) //监听及其他设置 .setInterpolator(new BounceInterpolator()) .setStartDelay(1000) .setListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { } @Override public void onAnimationEnd(Animator animation) { } @Override public void onAnimationCancel(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } }) .setUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { } }) .withEndAction(new Runnable() { @Override public void run() { Log.i(TAG, "run: end"); } }) .withStartAction(new Runnable() { @Override public void run() { Log.i(TAG, "run: start"); } }) .start();

  1. 动画的方法名和ObjectAnimator中药填写的属性名是一样的,很容易明白。
  2. 每个动画都有一个By的后缀的方法。加上By的意思是,继续动画这么多数值。不加By的意思是动画到这个数值。
  3. 也可以设置插值器和Animator.AnimatorListener监听以及ValueAnimator.AnimatorUpdateListener监听
  4. 可以直接设置动画开始和结束时的回调方法。
  5. 但是好像没有重复动画的功能
关于By 下面用旋转来演示一下By的区别。
按钮初始旋转角度已经旋转了90, 当点击按钮执行的动画是下面这样的时候,表示旋转到180:
btnShow.animate() .setDuration(2000) .rotation(180) .start();

Android动画|Android动画-属性动画-ViewPropertyAnimator
文章图片

第一次点击会从90旋转到180,再次点击会从180旋转到180,因为已经是180了,所以看着没动。
如果是By呢?:
btnShow.animate() .setDuration(2000) .rotationBy(180) .start();

Android动画|Android动画-属性动画-ViewPropertyAnimator
文章图片

Android动画|Android动画-属性动画-ViewPropertyAnimator
文章图片

    推荐阅读