Android动画学习(三)之使用ValueAnimator和ObjectAnimator实现动画实例

本文详细介绍了如何使用ValueAnimator和ObjectAnimator在Android中实现动画效果。讲解了Animator监听器、Interpolator和TypeEvaluator的使用,以及ValueAnimator实现动画的7个步骤,并提供了源代码下载链接。
摘要由CSDN通过智能技术生成

转载请注明出处http://blog.csdn.net/yegongheng/article/details/38435553


        上一篇博文我们初步地了解了Property Animation的工作方式及流程,并通过实验加深了对对象属性计算过程的理解,同时,我在文章的最后罗列一些实现Property Animation比较重要的类、接口和方法,并做了比较详细地说明。那今天这篇文章,我将带领大家使用这些Android系统提供的API来实现一些比较炫的动画效果。

使用ValueAnimator实现动画

       ValueAnimator是Property Animation系统的核心类,它包含了配置Property Animation属性的大部分方法,那要实现一个Property Animation,都需要直接或间接使用ValueAnimator类。那接下来我们将借助ValueAnimator类提供的方法来实现各种各样的动画效果,不过在此之前我们来学习一下实现动画的几个关键知识点。

Animator监听器介绍

      Property Animation提供了Animator.AnimatorListener和Animator.AnimatorUpdateListener两个监听器用于动画在播放过程中的重要动画事件。下面是两个监听器接口和方法的一些介绍和说明:
Animator.AnimatorListener:
       onAnimationStart() —— 动画开始时调用;
       onAnimationEnd() —— 动画结束时调用;
       onAnimationRepeat() —— 动画循环播放时调用;
       onAnimationCancel() —— 动画被取消时调用。不管终止的方式如何,被取消的动画仍然会调onAnimationEnd();
Animator.AnimatorUpdateListener:
       onAnimationUpdate() —— 动画每播放一帧时调用。在动画过程中,可侦听此事件来获取并使用 ValueAnimator 计算出来的属性值。利用传入事件的 ValueAnimator 对象,调用其 getAnimatedValue() 方法即可获取当前的属性值。如果使用 ValueAnimator来实现动画的话 ,则必需实现此侦听器。

使用及自定义Interpolator

       关于Interpolator(插值器)的知识,我们在上一篇博文就有接触,在这里再做详细介绍:插值器它定义了动画变化过程中的属性变化规则,它根据时间比例因子计算出一个插值因子,用于设定目标对象的动画执行是否为线性变化、非线性变化或先加速后减速等等。Android系统本身内置了一些通用的Interpolator(插值器),如下:

我们可以使用以上系统提供的插值器对目标对象实现一些诸如先加速后加速、弹跳和回移的动画效果。那如果以上这些插值器都无法满足我们的具体开发需求的话,那么也可以通过继承TimeInterpolator类来自定义自己的Interpolator,在自定义的Interpolator类中只需要要重写getInterpolation(float input)方法,并在该方法通过相关的计算,再返回计算后的结果(插值因子)就搞定,具体示例如下:
public class CustomInterpolator implements TimeInterpolator {

	@Override
	public float getInterpolation(float input) {
		// 编写相关的逻辑计算
		//input *= 0.8f;
		return input * input;
	}
}
上面是一个简单的示例,我们要实现一个自定义的Interpolator,只需在方法中编写相关的罗就计算就行。

使用及自定义TypeEvaluator

        上面学习了如何自定义Interpolator计算返回插值因子,那下一步就是使用TypeEvaluator根据插值因子计算属性值,Android系统可识别的类型包括int、float和颜色,分别由 IntEvaluator、 FloatEvaluator、 ArgbEvaluator 提供支持,如下:

同样的,如何系统提供的TypeEvaluator不能满足我们的要求,我们也可以通过继承TypeEvaluator类来定义自己的Evaluator,在自定义的TypeEvaluator类中只需要要重写getInterpolation(float input)方法,并在该方法通过相关的计算,再返回计算后的结果(插值因子)就搞定,具体示例如下:
import android.animation.TypeEvaluator;
import android.annotation.SuppressLint;

@SuppressLint("NewApi")
public class CustomEvaluator implements TypeEvaluator<Number> {

	@Override
	public Float evaluate(float fraction, Number startValue, Number endValue) {
		// TODO Auto-generated method stub
		float propertyResult = 0;
		/*float startFloat = startValue.floatValue();
		return (startFloat + fraction * (endValue.floatValue() - startFloat));*/
		return propertyResult;
	}
}

使用ValueAnimator实现动画的步骤及实践

那一般使用ValueAnimator实现动画分为以下七个步骤:

      1. 调用ValueAnimation类中的ofInt(int...values)、ofFloat(String propertyName,float...values)等静态方法实例化ValueAnimator对象,并设置目标属性的属性名、初始值或结束值等值;

      2.调用addUpdateListener(AnimatorUpdateListener mListener)方法为ValueAnimator对象设置属性变化的监听器;

      3.创建自定义的Interpolator,调用setInterpolator(TimeInterpolator value)为ValueAniamtor设置自定义的Interpolator;(可选,不设置默认为缺省值)

      4.创建自定义的TypeEvaluator,调用setEvaluator(TypeEvaluator value)为ValueAnimator设置自定义的TypeEvaluator;(可选,不设置默认为缺省值)

      5.在AnimatorUpdateListener 中的实现方法为目标对象的属性设置计算好

  • 21
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值