Android动画-属性动画-ViewPropertyAnimator

来源:互联网 发布:软件外包是什么意思 编辑:程序博客网 时间:2024/06/07 00:03

原文地址 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();

达到的效果是:

初见

然而,还能用下面的方法实现这个效果:

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();

第一次点击会从90旋转到180,再次点击会从180旋转到180,因为已经是180了,所以看着没动。

如果是By呢?:

btnShow.animate()                        .setDuration(2000)                        .rotationBy(180)                        .start();

0 0
原创粉丝点击