Android属性动画Property Animation系列一之ObjectAnimator

前面一篇博客解读了Android属性动画Property Animation系列一之ValueAnimator的相关知识点以及怎么使用。这篇博客继续解读Android 属性动画 ObjectAnimator 类的使用。

ObjectAnimator

相比ValueAnimator类,ObjectAnimator更加实用,因为它真正可以作用在一个对象上。不过ObjectAnimator是继承自ValueAnimator的,所以主体方法还是ValueAnimator里实现的。那么我们来看看ObjectAnimator的使用吧。常用方法有这些:ofFloat(),ofInt(),ofObject(),ofArgb(),ofPropertyValuesHolder()。

ObjectAnimator使用平移

ObjectAnimator animator = ObjectAnimator.ofFloat(imageView, “translationX”, 0.0f, 350.0f, 0f);animator.setDuration(2500).start();

ofFloat()方法的第一个参数表示动画操作的对象(可以是任意对象),第二个参数表示操作对象的属性名字(只要是对象有的属性都可以),第三个参数之后就是动画过渡值。当然过度值可以有一个到N个,如果是一个值的话默认这个值是动画过渡值的结束值。如果有N个值,动画就在这N个值之间过渡。

缩放 ObjectAnimator animator = ObjectAnimator.ofFloat(imageView, “scaleX”, 1.0f, 1.5f);animator.setDuration(2000).start();旋转动画ObjectAnimator animator = ObjectAnimator.ofFloat(imageView, “rotationX”, 0.0f, 90.0f,0.0F);animator.setDuration(2000).start();透明度动画ObjectAnimator animator = ObjectAnimator.ofFloat(imageView, “alpha”, 1.0f, 0.3f, 1.0F);animator.setDuration(2000);//动画时间

是不是感觉很简单?两行代码就能实现一个动画效果,当然只是一个简单的动画配置,如果你需要更加好的效果动画,你可以通过这些方法去配置:

详细动画配置如下: ObjectAnimator animator = ObjectAnimator.ofFloat(imageView, “alpha”, 1.0f, 0.3f, 1.0F);animator.setDuration(2000);//动画时间animator.setInterpolator(new BounceInterpolator());//动画插值animator.setRepeatCount(-1);//设置动画重复次数animator.setRepeatMode(ValueAnimator.RESTART);//动画重复模式animator.setStartDelay(1000);//动画延时执行animator.start();//启动动画

可以根据自己的需求进行配置调整。

组合动画

上面我们看到的都是单个动画,那么需要实现组合动画怎么办呢?不着急,,Android工程师给我们提供了两种方法来实现,AnimatorSet类,ObjectAnimator.ofPropertyValuesHolder()方法。

组合动画1–AnimatorSet的使用

这个类提供了一个play()方法,如果我们向这个方法中传入一个Animator对象(ValueAnimator或ObjectAnimator)将会返回一个AnimatorSet.Builder的实例,AnimatorSet.Builder中包括以下四个方法:

after(Animator anim) 将现有动画插入到传入的动画之后执行 after(long delay) 将现有动画延迟指定毫秒后执行 before(Animator anim) 将现有动画插入到传入的动画之前执行 with(Animator anim) 将现有动画和传入的动画同时执行

好的,有了这些方法,我们来实现一个组合动画:开始图片的透明度从不透明到0.2的透明再到不透明,随着整个布局背景的颜色变化的同时ImageView先向右平移200个像素,然后再放大2倍,最后沿着X轴从0到90度再到0度的旋转。

代码如下:

ObjectAnimator animator = ObjectAnimator.ofInt(container, “backgroundColor”, 0xFFFF0000, 0xFFFF00FF);ObjectAnimator animator1 = ObjectAnimator.ofFloat(imageView, “translationX”, 0.0f, 200.0f, 0f);ObjectAnimator animator2 = ObjectAnimator.ofFloat(imageView, “scaleX”, 1.0f, 2.0f);ObjectAnimator animator3 = ObjectAnimator.ofFloat(imageView, “rotationX”, 0.0f, 90.0f, 0.0F);ObjectAnimator animator4 = ObjectAnimator.ofFloat(imageView, “alpha”, 1.0f, 0.2f, 1.0F);//组合动画方式1AnimatorSet set = new AnimatorSet();((set.play(animator).with(animator1).before(animator2)).before(animator3)).after(animator4);set.setDuration(5000);set.start();

我们可以看到,先创建了5个ObjectAnimator的动画,然后 new 了一个AnimatorSet对象,将刚才5个动画play到AnimatorSet对象中执行。执行效果就是上面的效果图了。 当然你要可以使用AnimatorSet类中的playTogether(Animator… items)方法实现多个动画同时执行的效果。

组合动画2–PropertyValuesHolder的使用

除了上面Animator类还可以使用PropertyValuesHolder类来实现组合动画,不过这个组合动画就没有上面的丰富了,使用PropertyValuesHolder类只能多个动画一起执行。当然我们得结合 ObjectAnimator.ofPropertyValuesHolder(Object target, PropertyValuesHolder… values);方法来使用。第一个参数是动画的目标对象,之后的参数是PropertyValuesHolder类的实例,可以有多个这样的实例。代码如下:

//组合动画方式2PropertyValuesHolder valuesHolder = PropertyValuesHolder.ofFloat(“translationX”, 0.0f, 300.0f);PropertyValuesHolder valuesHolder1 = PropertyValuesHolder.ofFloat(“scaleX”, 1.0f, 1.5f);PropertyValuesHolder valuesHolder2 = PropertyValuesHolder.ofFloat(“rotationX”, 0.0f, 90.0f, 0.0F);PropertyValuesHolder valuesHolder3 = PropertyValuesHolder.ofFloat(“alpha”, 1.0f, 0.3f, 1.0F);ObjectAnimator objectAnimator = ObjectAnimator.ofPropertyValuesHolder(imageView, valuesHolder, valuesHolder1, valuesHolder2, valuesHolder3);objectAnimator.setDuration(2000).start();慢慢学会了长大。流转的时光,

Android属性动画Property Animation系列一之ObjectAnimator

相关文章:

你感兴趣的文章:

标签云: