Android属性动画基础介绍

一个动画主要分为3块内容:

Animator 执行动画的主体(通过TypeEvaluator提供的值,设置到对应的view的属性中,然后通过view的重绘,起到内容显示改变的目的)

TimeInterpolator插值器,提供动画各个阶段的因子

TypeEvaluator配合插值器的提供的因子,最终计算出动画各个阶段对应的动画属性值



第一部分 Animator 

Animator 

是一个抽象类,所以不能直接新建一个对象,必须有子类进行派生。

内部接口:

内部还有一个接口AnimatorListener

成员属性:

ArrayList<AnimatorListener> mListeners = null;

内部有一个动画接口列表类型的成员,可见用户可以往里添加多个动画监听接口。

成员方法:

public void start()

启动动画,那个线程调用的它就在那个线程里执行,但调用线程必须包含loop,所以一般在ui线程中调用它,否则报异常。


public void cancel()

取消动画,停止动画的轨迹,后面会接着调用end() 必须在考用start的线程中调用,一般还是ui线程


public void end() 

结束动画,主要是结束动画的运行,必须在考用start的线程中调用,一般还是ui线程


public abstract get/setStartDelay

动画启动延时


public abstract get/setDuration

动画运行时长  


public abstract void setInterpolator

设置动画的插值器(插值器用来计算一个因子,通过这个因子决定当前动画应该在哪里,怎样显示。如匀速或者加速)



public abstract boolean isRunning()

判断动画是否还在运行中,也就是动画结束没有。至于如何算运行,由子类去处理判断


public boolean isStarted()

调用的就是isRunning()


public add/removegetremoveAllListener

添加/移除/获取动画监听器



public void setupStartValues() 

用一个合适的信息来获取动画的开始值


public void setupEndValues()

用一个合适的信息来获取动画的结束值


public void setTarget(Object target)

设置目标对象(也就是需要动画的属性)



AnimatorSet

继承自Animator,而且不可以再继续派生。


第二部分  TimeInterpolator

2.1TimeInterpolator

插值器,是一个接口


2.1.1 Interpolator

继承值TimeInterpolator的一个接口,放在这里也就是过渡一下。


2.1.1.1 AccelerateInterpolator

加速插值器


2.1.1.2 LinearInterpolator

匀速插值器,直接返回输入的值


2.1.1.3 DecelerateInterpolator

减速插值器


2.1.1.4 AccelerateDecelerateInterpolator

先加速后减速插值器


float getInterpolation

获取一个因子


第三部分  TypeEvaluator

3.1 TypeEvaluator<T>

值计算器,通过插值器返回的因子,计算出当前动画属性值(动画属性是指透明度,缩放比例等能产生动画效果的属性)


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

就是通过给定的动画因子(fraction),结合动画属性(startValue, endValue)的起止值,计算出当天的动画属性值。


3.1.1 IntEvaluator

派生自TypeEvaluator,主要计算属性值为int类型

public Integer evaluate

简单来说就是属性: 开始值+因子*(终止值-开始值)


3.1.2 FloatEvaluator

派生自TypeEvaluator,主要计算属性值为float类型

public Float evaluate

简单来说就是属性: 开始值+因子*(终止值-开始值)


3.1.3 ArgbEvaluator

派生自TypeEvaluator,主要计算属性值为Object类型,这里为什么放Object,本质上讲Argb(颜色值)是一个32位的int型,但为了表示颜色的argb四块内容,会将

32位的整型按8位拆分(一个字节一组),0-8位表示blue,9-16位表示green,17-24位表示red,25-32位表示alpha,且一个字节的最高位是0防止溢出进位影响下一个字节,所以不能通过整体

*因子的方式,而要通过移位拆分出各个位,分别处理。

public Object evaluate

简单来说就是属性: 开始值+因子*(终止值-开始值)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值