本文介绍Android中动画相关内容
android.animation
包
Animator
ValueAnimator
值动画TimeAnimator
ObjectAnimator
对象动画
AnimatorSet
动画集合
1 | public void addListener (Animator.AnimatorListener listener) |
添加和删除监听器
1 | public void cancel () |
动画进程控制
1 | public boolean isPaused () |
获得动画状态
1 | public void setTarget (Object target) |
设置动画的对象
1 | public void setupEndValues () |
并不清楚实际作用
属性:
startDelay
:开始的延迟duration
:持续时间interpolator
:插值器
ValueAnimator
1 | public static ValueAnimator ofFloat (float... values) |
通过这些获得ValueAnimator
1 | public void addUpdateListener (ValueAnimator.AnimatorUpdateListener listener) |
添加和移除监听器
1 | public void reverse () |
倒序播放
属性:
startDelay
:开始延时currentPlayTime
:当前播放时间duration
:持续时间evaluator
:求值器interpolator
:插值器frameDelay
:帧延时repeatCount
:重复次数,默认是0
,如果大于0
或INFINITE
,那么repeatMode
有效repeatMode
:重复模式,取值RESTART
和REVERSE
ValueAnimator.AnimatorUpdateListener
接口
1 | public abstract void onAnimationUpdate (ValueAnimator animation) |
监听值更新
TimeAnimator
提供一个简单的回调机制,在动画的每一帧通知你
1 | public void setTimeListener (TimeAnimator.TimeListener listener) |
设置监听器
TimeAnimator.TimeListener
接口
1 | public abstract void onTimeUpdate (TimeAnimator animation, long totalTime, long deltaTime) |
监听帧变化
ObjectAnimation
1 | public static ObjectAnimator ofFloat (T target, Property<T, Float> property, float... values) |
通过这些获得ObjectAnimation
1 | public void setAutoCancel (boolean cancel) |
当运行其他ObjectAnimator
时是否自动取消
1 | public ObjectAnimator setDuration (long duration) |
设置持续时间
1 | public void setProperty (Property property) |
设置要作用的属性
AnimatorSet
属性:
startDelay
:开始延时duration
:持续时间interpolator
:插值器
1 | public AnimatorSet.Builder play (Animator anim) |
构建一个Builder
对象,开始播放
1 | public void playSequentially (Animator... items) |
顺序播放
1 | public void playTogether (Collection<Animator> items) |
同时播放
AnimatorSet.Builder
内部类,用来方便的增加动画
1 | public AnimatorSet.Builder after (Animator anim) |
用这四个函数来播放控制
例1:
1 | AnimatorSet s = new AnimatorSet(); |
例2:
1 | AnimatorSet s = new AnimatorSet(); |
所以如果要顺序播放1、2、3就要这样
1 | AnimatorSet s = new AnimatorSet(); |
Animator.AnimatorListener
接口
1 | public abstract void onAnimationCancel (Animator animation) |
监听开始、结束、取消和重复
Animator.AnimatorPauseListener
接口
1 | public abstract void onAnimationPause (Animator animation) |
监听暂停和继续
AnimatorListenerAdapter
提供了Animator.AnimatorListener
和Animator.AnimatorPauseListener
空实现的便利类
AnimatorInflater
从XML初始化动画
1 | public static Animator loadAnimator (Context context, int id) |
TypeEvaluator
接口,翻译成估值器,方便为任意类型提供动画效果
1 | public abstract T evaluate (float fraction, T startValue, T endValue) |
fraction
理解成运行的百分比,startValue
开始值,endValue
结束值,返回算出来的结果,一般计算是简单的startValue + fraction * (endValue - startValue)
IntEvaluator
FloatEvaluator
RectEvaluator
矩形每条边各自计算ArgbEvaluator
每个通道各自计算
KeyFrame
关键帧,为动画保存时间-值对,是一个抽象类
1 | public static Keyframe ofFloat (float fraction, float value) |
通过这些构造关键帧
属性
fraction
:时间,百分比0
-1
之间value
:值interpolator
:可选的插值器
PropertyValuesHolder
保存在一个动画中对应的属性和其变化的值,可用来创建动画同时作用在几个不同属性上
1 | public static PropertyValuesHolder ofFloat (String propertyName, float... values) |
例子,显示了view
的width
跟随5个关键帧变化
1 | Keyframe kf0 = Keyframe.ofInt(0, 400); |
TimeInterpolator
接口,时间插值器,就是提供一个跟随时间变化的函数,描述动画的变化率
1 | public abstract float getInterpolation (float input) |
映射input
到动画的fraction
,input
是0
-1
之间线性变化,返回的值可能大于1
(overshoot的情况)
AccelerateDecelerateInterpolator
AccelerateInterpolator
AnticipateInterpolator
AnticipateOvershootInterpolator
BounceInterpolator
CycleInterpolator
DecelerateInterpolator
Interpolator
LinearInterpolator
OvershootInterpolator
LayoutTransition
布局变换,调用ViewGroup.setLayoutTransition()
添加布局动画,调用setAnimator()
自定义动画
有两种不同的变化:添加/移除View
,改变Visiblity
会触发同样的逻辑
有四种因此产生的动画
1 | public void addTransitionListener (LayoutTransition.TransitionListener listener) |
添加和移除布局变换监听器
1 | public void disableTransitionType (int transitionType) |
允许或禁止某种变换类型
变换类型
APPEARING
出现CHANGE_APPEARING
因别的东西出现而发生布局变化DISAPPEARING
消失CHANGE_DISAPPEARING
因别的东西消失而发生布局变化CHANGING
默认关闭,因不是添加移除产生的布局变化
1 | public boolean isChangingLayout () |
判断动画状态
1 | public void setAnimator (int transitionType, Animator animator) |
给某个变换类型设置动画