不忘初心 砥砺前行, Tomorrow Is Another Day !
相关文章
本文概要:
- 基本使用方式意事项
- 复合型动画使用方式
前言
android动画分为View动画和属性动画,View动画又包括补间动画和逐帧动画.由于现在View动画基本上很少运用,使用也比较简单这里就不在讲述.
一. 基本使用方式
1.1 方式一: ViewPropertyAnimator
示例代码
view.animate()
.translationX(Utils.dpToPixel(200))
.translationY(100)
.rotation(180)
.alpha(0.5f)
.setStartDelay(1000)
.start();
复制代码
此方式只适合系统定义的属性如translationX,translationY等等来快速使用属性动画,如果需要一些自定义类型采取方式二.
1.2 方式二: ValueAnimator与ObjectAnimator
原理:
- ValueAnimator.ofInt()/float/object/PropertyValuesHolder(定义动画数字区间)
- 插值器(随着时间的流逝,返回当前动画完成度进度fraction)
- 估值器(返回具体数值)
- 回调onAnimationUpdate
- ObjectAnimator.ofInt()/float/object/ofPropertyValuesHolder(定义动画对象及数字区间)
- 插值器(返回当前动画完成度进度fraction)
- 估值器(返回具体数值)
- 拼接"set"+传入的PropertyName反射回调set方法.
- 注意事项:
- 构造传入的类型要和估值器返回的类型一致。
- 当传入类型是特殊类型时,采用ofObject,并且需要自定义TypeEvaluator估计器.
- ObjectAnimator中需要提供get(可选)/set(必须)方法.
示例代码
ValueAnimator valueAnimator = ValueAnimator.ofInt(0, 400);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int curValue = (int) animation.getAnimatedValue();
Log.d(TAG, "onAnimationUpdate: " + curValue);
}
});
valueAnimator.setDuration(2000);
valueAnimator.setEvaluator(new IntEvaluator());
valueAnimator.setInterpolator(new LinearInterpolator());
valueAnimator.start();
ObjectAnimator objectAnimator = ObjectAnimator.ofInt("控件对象",
"属性名",0,400);
objectAnimator.setDuration(2000);
objectAnimator.setEvaluator(new IntEvaluator());
objectAnimator.setInterpolator(new LinearInterpolator());
objectAnimator.start();
复制代码
二. 复合型动画使用方式
2.1 PropertyValuesHolder与Keyframe
当同一控件多个属性,可以实现多个动画的播放时,也可以采取如下方式.
- PropertyValuesHolder.ofInt()/float/object/Keyframe:
相当于对参数属性名和值进行封装保存. - Keyframe.ofInt()/float/object:
实现每一帧的速率(值),至少要设置两帧.
2.2 AnimatorSet与AnimatorSet.builder
-
playTogether和playSequentially.只负责定时激活控件动画.
-
play.with.after.before.自由排列动画顺序.
-
当AnimatorSet所设置的函数与单个动画所设置冲突时,就以AnimatorSet设置为准。
- 唯一的例外就是setStartDelay。
AnimatorSet真正激活延时=AnimatorSet.startDelay(延长AnimatorSet的激活时间)+第一个动画.startDelay
三. 布局动画相关
- layoutAnimation与gridLayoutAnimation :在api 1引入
- animateLayoutChanges(使用系统默认动画)与LayoutTransaction(自定义动画) :在api 11就引入
由于本人技术有限,如有错误的地方,麻烦大家给我提出来,本人不胜感激,大家一起学习进步.
参考链接: