自定义控件三部曲之动画篇(七)——ObjectAnimator基本使用

本文详细介绍了ObjectAnimator的使用方法,包括如何通过setter函数实现动画效果,以及自定义控件时如何添加ObjectAnimator属性。通过实例展示了如何改变控件的透明度、旋转、平移和缩放,解析了ObjectAnimator的工作原理,强调了set函数的重要性。此外,还探讨了只设置一个过渡值时需要实现get函数的情况。最后,提到了ArgbEvaluator在颜色动画中的应用。
摘要由CSDN通过智能技术生成

前言:
假如生活欺骗了你,
不要悲伤,不要心急!
忧郁的日子里须要镇静:
相信吧,快乐的日子终将会来临!
心儿永远向往着未来;
现在却常是忧郁。
一切都是瞬息,一切都将会过去;
而那过去了的,就会成为亲切的怀恋。
—–普希金

 

 

相关文章:

《Android自定义控件三部曲文章索引》http://blog.csdn.net/harvic880925/article/details/50995268

一、概述

1、引入

上几篇给大家讲了ValueAnimator,但ValueAnimator有个缺点,就是只能对数值对动画计算。我们要想对哪个控件操作,需要监听动画过程,在监听中对控件操作。这样使用起来相比补间动画而言就相对比较麻烦。
为了能让动画直接与对应控件相关联,以使我们从监听动画过程中解放出来,谷歌的开发人员在ValueAnimator的基础上,又派生了一个类ObjectAnimator;
由于ObjectAnimator是派生自ValueAnimator的,所以ValueAnimator中所能使用的方法,在ObjectAnimator中都可以正常使用。
但ObjectAnimator也重写了几个方法,比如ofInt(),ofFloat()等。我们先看看利用ObjectAnimator重写的ofFloat方法如何实现一个动画:(改变透明度)

 

 

ObjectAnimator animator = ObjectAnimator.ofFloat(tv,"alpha",1,0,1);
animator.setDuration(2000);
animator.start();

效果图如下:

 

我们这里还是直接使用上一篇的框架代码;(当点击start anim时执行动画)从上面的代码中可以看到构造ObjectAnimator的方法非常简单:

 

public static ObjectAnimator ofFloat(Object target, String propertyName, float... values) 
  • 第一个参数用于指定这个动画要操作的是哪个控件
  • 第二个参数用于指定这个动画要操作这个控件的哪个属性
  • 第三个参数是可变长参数,这个就跟ValueAnimator中的可变长参数的意义一样了,就是指这个属性值是从哪变到哪。像我们上面的代码中指定的就是将textview的alpha属性从0变到1再变到0;

下面我们再来看一下如何实现旋转效果:

ObjectAnimator animator = ObjectAnimator.ofFloat(tv,"rotation",0,180,0);
animator.setDuration(2000);
animator.start();

效果图如下:

 

从代码中可以看到,我们只需要改变ofFloat()的第二个参数的值就可以实现对应的动画;
那么问题来了,我们怎么知道第二个参数的值是啥呢?

2、setter函数

我们再回来看构造改变rotation值的ObjectAnimator的方法

 

 

ObjectAnimator animator = ObjectAnimator.ofFloat(tv,"rotation",0,180,0);

TextView控件有rotation这个属性吗?没有,不光TextView没有,连它的父类View中也没有这个属性。那它是怎么来改变这个值的呢?其实,ObjectAnimator做动画,并不是根据控件xml中的属性来改变的,而是通过指定属性所对应的set方法来改变的。比如,我们上面指定的改变rotation的属性值,ObjectAnimator在做动画时就会到指定控件(TextView)中去找对应的setRotation()方法来改变控件中对应的值。同样的道理,当我们在最开始的示例代码中,指定改变”alpha”属性值的时候,ObjectAnimator也会到TextView中去找对应的setAlpha()方法。那TextView中都有这些方法吗,有的,这些方法都是从View中继承过来的,在View中有关动画,总共有下面几组set方法:

//1、透明度:alpha
public void setAlpha(float alpha)

//2、旋转度数:rotation、rotationX、rotationY
public void setRotation(float rotation)
public void setRotationX(float rotationX)
public void setRotationY(float rotationY)

//3、平移:translationX、translationY
public void setTranslationX(float translationX) 
public void setTranslationY(float translationY)

//缩放:scaleX、scaleY
public void setScaleX(float scaleX)
public void setScaleY(float scaleY)

可以看到在View中已经实现了有关alpha,rotaion,translate,scale相关的set方法。所以我们在构造ObjectAnimator时可以直接使用。
在开始逐个看这些函数的使用方法前,我们先做一个总结:
1、要使用ObjectAnimator来构造对画,要操作的控件中,必须存在对应的属性的set方法
2、setter 方法的命名必须以骆驼拼写法命名,即set后每个单词首字母大写,其余字母小写,即类似于setPropertyName所对应的属性为propertyName

下面我们就来看一下上面中各个方法的使用方法及作用。
有关alpha的用法,上面已经讲过了,下面我们来看看其它的

(1)、setRotationX、setRotationY与setRotation

  • setRotationX(float rotationX):表示围绕X轴旋转,rotationX表示旋转度数 
  • setRotationY(rotationY):表示围绕Y轴旋转,rotationY表示旋转度数 
  • setRotation(float rotation):表示围绕Z旋转,rotation表示旋转度数 

先来看看setRotationX的效果:

ObjectAnimator animator = ObjectAnimator.ofFloat(tv,"rotationX",0,270,0);
animator.setDuration(2000);
animator.start();

 

效果图如下:


从效果图中明显看出,textview的旋转方法是围绕X轴旋转的,我们设定为从0度旋转到270度再返回0度。
然后再来看看setRotationY的使用方法与效果:

 

 

 

ObjectAnimator animator = ObjectAnimator.ofFloat(tv,"rotationY",0,180,0);
animator.setDuration(2000);
animator.start();

 

效果图如下:


从效果图中明显可以看出围绕Y轴旋转的。
我们再来看看setRotation的用法与效果:

 

 

 

ObjectAnimator animator = ObjectAnimator.of
objectanimator 是 Android 中的一个动画类,可以用来实现属性动画。它可以对任意对象的属性进行动画操作,比如位移、缩放、旋转等。通过 objectanimator,我们可以创建出各种炫酷的动画效果,为用户带来更好的交互体验。 在使用 objectanimator 时,我们首先需要创建一个 Animator 对象,然后通过 ObjectAnimator 的静态方法 ofXXX() 来创建相应属性的动画对象。比如,我们可以通过 ObjectAnimator.ofFloat() 来创建一个浮点数属性的动画对象,通过 ObjectAnimator.ofInt() 来创建一个整数属性的动画对象。 然后,我们可以设置动画的目标对象和属性名,通过 setTarget() 和 setPropertyName() 方法来实现。接着,我们可以设置动画的起始值和结束值,通过 setFloatValues() 或者 setIntValues() 方法来完成。 最后,我们可以为动画设置一些其他的属性,比如动画的持续时间、插值器、重复次数等,通过 Animator 的相关方法来进行设置。最后,我们调用 start() 方法即可启动动画。 当我们需要还原 objectanimator 动画时,可以调用 reverse() 方法将动画从结束状态还原到起始状态。这样即可实现将动画逆向播放,从而实现动画的还原效果。 总结起来,objectanimator 是 Android 中实现属性动画的一个重要类,可以通过设置目标对象和属性名,以及起始值和结束值来创建出各种炫酷的动画效果。通过调用 reverse() 方法可以将动画还原到起始状态,实现动画的逆向播放效果。通过使用 objectanimator,我们可以为 Android 应用带来更丰富的交互体验。
评论 47
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值