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
中编写。要想使用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();