安卓属性动画的基本用法(二)

本文详细介绍了Android属性动画中的ObjectAnimator,包括其基本用法、参数解释及如何实现控件的平移与背景颜色变换等复合动画。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      上一篇给大家讲了属性动画中的ValueAnimator,如果大家细细的观察研究就会发现ValueAnimator的不足之处就是只能对数值对动画计算。假设一下如果我们要想对哪个控件操作,需要监听动画过程,在监听中对控件操作,如果用ValueAnimator来操作的话相比补间动画而言就相对比较麻烦和复杂。 那我们又想用属性动画又想实现这样的效果应该怎么做呢?这就引出了我们今天要讲的属性动画的另外一种ObjectAnimator,大家先看一下官方的介绍:


   由于ObjectAnimator是派生自ValueAnimator的,所以ValueAnimator中所能使用的方法,在ObjectAnimator中都可以正常使用并且对其中的某些方法进行重写,只要大家对ValueAnimator熟悉了,那么ObjectAnimator用起来的时候就很容易理解了。

   先给大家看一下效果图:

   

    一个简单的平移动画,但是用的却是ObjectAnimator。看下代码:


	ObjectAnimator animator = ObjectAnimator.ofFloat(view, "translationX", 0, 100,0);  
	    animator.setDuration(3000);  
	    animator.setInterpolator(new BounceInterpolator());
	    animator.start();  

     是不是灰常的简单?

   我们在看下方法的参数都是什么意思:

 

public static ObjectAnimator ofFloat (Object target, String propertyName, float... values)
Added in API level 11

Constructs and returns an ObjectAnimator that animates between float values. A single value implies that that value is the one being animated to. 
Two values imply starting and ending values. More than two values imply a starting value, values to animate through along the way, 
and an ending value (these values will be distributed evenly across the duration of the animation).
Parameters
target 	       The object whose property is to be animated. This object should have a public method on it called setName(),
                  where name is the value of the propertyName parameter.
propertyName 	 The name of the property being animated.
values 	 A set of values that the animation will animate between over time.
Returns
           An ObjectAnimator object that is set up to animate between the given values. 

以上是谷歌官方给出的解释,具体的中文意思也简单。
  • 第一个参数用于指定这个动画要操作的是哪个控件
  • 第二个参数用于指定这个动画要操作这个控件的哪个属性
  • 第三个参数是可变长参数,这个就跟ValueAnimator中的可变长参数的意义一样了,就是指这个属性值是从哪变到哪。像我们上面的代码中指定的就是将view的translationX属性从0变到100再变到0;
看到这我相信大家应该都知道怎么用了吧?大家需要注意的是第二个参数,想一想为什么设置成“translationX”这个按钮就会自动平移呢?其实他的原理是这样的,ObjectAnimator做动画,并不是根据控件xml中的属性来改变的,而是通过指定属性所对应的set方法来改变的。比如,我们上面指定的改变translationX的属性值,ObjectAnimator在做动画时就会到指定控件中去找对应的setTranslationX(float translationX) 方法来改变控件中对应的值,那button中都有这些方法吗,有的,这些方法都是从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) 

//背景颜色
public void setBackgroundColor(@ColorInt int color)  对应的字段是BackgroundColor
 
  所以第二个参数的值就是我上面标红的,在选择的时候要注意,可不是想写什么就写什么的。

  到这的时候基本用法大家可能会了,大家会有疑问补间动画可以同时进行集中不同的动画,那么属性动画可以吗?这个你能想到的谷歌同样会想到的,当然是可行的,大家看下效果:

 

  有没有发现控件一遍在平移一边在进行背景颜色的变换。看下代码:

	    ObjectAnimator animator1 = ObjectAnimator.ofFloat(view, "translationX", 0, 100,0);  
	    ObjectAnimator animator2 = ObjectAnimator.ofInt(view, "BackgroundColor",  0xffff00ff,0xffffff00, 0xffff00ff);
	    AnimatorSet animator = new AnimatorSet();
	    animator.setDuration(3000);  
	    animator.playTogether(animator1,animator2);
	    animator.setInterpolator(new BounceInterpolator());
	    animator.start(); 
 补间动画有个AnimationSet属性动画有个AnimatorSet,他们的用法大同小异。
     到这就差不多要结束了,其实大家细心地话就会发现ObjectAnimator ofPropertyValuesHolder(Object target,PropertyValuesHolder... values)的方法,其用法大家可以自行研究下,里面很多东西可以自定义的,大家对动画有兴趣的话可以深入的研究。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值