ValueAnimator

ValueAnimator是ObjectAnimator的父类,提供了更高的可控性。本文通过平移动画实例,详细讲解如何设置动画,包括简单的直线运动、函数运动如抛物线、贝塞尔曲线,以及多种运动方式的组合。通过自定义求值程序和运动类型,可以实现丰富的动画效果。
摘要由CSDN通过智能技术生成

ValueAnimator是之前提到过的ObjectAnimator的父类;

它使用起来不像ObjectAnimator这么简单,但可控性更高,更能发挥想象力

一般来说,使用ValueAnimator需要通过以下几步;

  • setObjectValues
  • setEvaluator
  • addUpdateListener
  • setDuration
  • start
public void setObjectValues(Object... values)

设置一组值,动画会根据这组值执行;

不同于ObjectAnimator,这里的参数不能只有一个值;

注意,这里参数是Object,这就给了很大的想象空间;

void setEvaluator(TypeEvaluator value)

设置求值程序;

TypeEvaluator 是一个接口;

public interface TypeEvaluator<T> {

    public T evaluate(float fraction, T startValue, T endValue);

}

通过evaluate方法返回对应的值;

真个动画过程中evaluate方法会被调用很多次,直到动画播放结束;

void addUpdateListener(AnimatorUpdateListener listener)

主要是AnimatorUpdateListener;

它也是一个接口,返回动画过程中evaluate计算的记过;

public static interface AnimatorUpdateListener {
    void onAnimationUpdate(ValueAnimator animation);

}

以下用平移动画举一些例子

一、 简单的直线运动

1)既然是平移运动,就得先有一个坐标,故创建类MyPoint;

这是之后传入setObjectValues的参数,也是TypeEvaluator中evaluate用来计算的值,同时也是onAnimationUpdate获取的返回值;

public class MyPoint {
	public float x;
	public float y;
}

2)实现求值程序

直线运动的话,一个简单的方程就可以了;

public class MyEvaluator implements TypeEvaluator {

	@Override
	public Object evaluate(float fraction, Object startValue, Object endValue) {
		MyPoint pointS = (MyPoint)startValue;
		MyPoint pointE = (MyPoint)endValue;
		float x = pointS.x + (pointE.x - 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值