ObjectAnimator
Object类可以对对象的任意属性进行操作,列如 View的rotation属性,下面我们通过对ImageView的rotation属性的改变来看看怎么用这个类。代码如下:
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(imageview, "rotation", 0f, 360f); objectAnimator.setDuration(3000); objectAnimator.start(); 这是对imageview对象进行0-360的旋转,
如果想要对imageview进行上下翻转,则需要将 rotation 改为 rotatianX,
如果想要对imageview进行左右翻转,则需要将 rotation 改为 rotatianY。
当然你也可以对alpha,scale,translate进行操作。
alpha
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(show, "alpha", 1f, 0f,1f); objectAnimator.setDuration(3000); objectAnimator.start();
scale
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(show, "scaleX", 1f, 2f,1f); objectAnimator.setDuration(3000); objectAnimator.start();translate
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(show, "translationX", currentX, 500, currentX); objectAnimator.setDuration(3000); objectAnimator.start();
前面所提到的动画都显得很单一,如果我要透明的同时进行旋转呢?当然了google肯定不会这样简单的问题都想不到。所以google提供了AnimatorSet来实现,这个类提供了一个play()方法。如果我们向这个方法中传入一个Animator对象(ValueAnimator或ObjectAnimator)将会返回一个AnimatorSet.Builder的实例。
AnimatorSet.Builder中包括以下四个方法:
after(Animator anim) 将现有动画插入到传入的动画之后执行 after(long delay) 将现有动画延迟指定毫秒后执行 before(Animator anim) 将现有动画插入到传入的动画之前执行 with(Animator anim) 将现有动画和传入的动画同时执行 具体使用方式如下:ObjectAnimator translation = ObjectAnimator.ofFloat(show, "translationX", currentX, 500, currentX); ObjectAnimator rotation = ObjectAnimator.ofFloat(show, "rotation", 0f, 360f); ObjectAnimator alpha = ObjectAnimator.ofFloat(show, "alpha", 1f, 0f,1f); AnimatorSet animatorSet = new AnimatorSet(); animatorSet.play(translation).after(rotation).with(alpha); animatorSet.setDuration(5000); animatorSet.start();
补间动画可以在xml中编写,当然属性动画也可以在xml中编写。要想使用xml编写首先在res目录下面建立一个animator文件夹在xml中我们一共可以使用三种标签。
<animator> 对应代码中的ValueAnimator <objectAnimator> 对应代码中的ObjectAnimator <set> 对应代码中的AnimatorSet 我们如果要改变 alpha 属性就可以这样写。
<?xml version="1.0" encoding="utf-8"?> <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" android:duration="300" android:propertyName="alpha" android:valueFrom="0f" android:valueTo="1f" android:valueType="floatType" /> 复杂的动画也可以用 xml 来编写,这时候需要 set 标签
<set xmlns:android="http://schemas.android.com/apk/res/android" android:ordering="sequentially"> <objectAnimator android:duration="2000" android:propertyName="translationX" android:valueFrom="-500" android:valueTo="0" android:valueType="floatType" /> <set android:ordering="together"> <objectAnimator android:duration="3000" android:propertyName="rotation" android:valueFrom="0" android:valueTo="360" android:valueType="floatType" /> <set android:ordering="sequentially"> <objectAnimator android:duration="1500" android:propertyName="alpha" android:valueFrom="1" android:valueTo="0" android:valueType="floatType" /> <objectAnimator android:duration="1500" android:propertyName="alpha" android:valueFrom="0" android:valueTo="1" android:valueType="floatType" /> </set> </set> </set> 在代码中使用编写好的动画:
Animator animator = AnimatorInflater.loadAnimator(context, R.animator.anim_file); animator.setTarget(view); animator.start();