1、概述
Android提供了几种动画类型:View Animation 、Drawable Animation 、Property Animation 。View Animation相当简单,不过只能支持简单的缩放、平移、旋转、透明度基本的动画,且有一定的局限性。比如:你希望View有一个颜色的切换动画;你希望可以使用3D旋转动画;你希望当动画停止时,View的位置就是当前的位置;这些View Animation都无法做到。这就是Property Animation产生的原因,本篇博客详细介绍Property Animation的用法。至于Drawable Animation,嗯,略~
2、相关API
Property Animation故名思议就是通过动画的方式改变对象的属性了,我们首先需要了解几个属性:
Duration动画的持续时间,默认300ms。
Time interpolation:时间差值,乍一看不知道是什么,但是我说LinearInterpolator、AccelerateDecelerateInterpolator,大家一定知道是干嘛的了,定义动画的变化率。
Repeat count and behavior:重复次数、以及重复模式;可以定义重复多少次;重复时从头开始,还是反向。
Animator sets: 动画集合,你可以定义一组动画,一起执行或者顺序执行。
Frame refresh delay:帧刷新延迟,对于你的动画,多久刷新一次帧;默认为10ms,但最终依赖系统的当前状态;基本不用管。
相关的类
ObjectAnimator 动画的执行类,后面详细介绍
ValueAnimator 动画的执行类,后面详细介绍
AnimatorSet 用于控制一组动画的执行:线性,一起,每个动画的先后执行等。
AnimatorInflater 用户加载属性动画的xml文件
TypeEvaluator 类型估值,主要用于设置动画操作属性的值。
TimeInterpolator 时间插值,上面已经介绍。
总的来说,属性动画就是,动画的执行类来设置动画操作的对象的属性、持续时间,开始和结束的属性值,时间差值等,然后系统会根据设置的参数动态的变化对象的属性。
1、概述
Android提供了几种动画类型:View Animation 、Drawable Animation 、Property Animation 。View Animation相当简单,不过只能支持简单的缩放、平移、旋转、透明度基本的动画,且有一定的局限性。比如:你希望View有一个颜色的切换动画;你希望可以使用3D旋转动画;你希望当动画停止时,View的位置就是当前的位置;这些View Animation都无法做到。这就是Property Animation产生的原因,本篇博客详细介绍Property Animation的用法。至于Drawable Animation,嗯,略~
2、相关API
Property Animation故名思议就是通过动画的方式改变对象的属性了,我们首先需要了解几个属性:
Duration动画的持续时间,默认300ms。
Time interpolation:时间差值,乍一看不知道是什么,但是我说LinearInterpolator、AccelerateDecelerateInterpolator,大家一定知道是干嘛的了,定义动画的变化率。
Repeat count and behavior:重复次数、以及重复模式;可以定义重复多少次;重复时从头开始,还是反向。
Animator sets: 动画集合,你可以定义一组动画,一起执行或者顺序执行。
Frame refresh delay:帧刷新延迟,对于你的动画,多久刷新一次帧;默认为10ms,但最终依赖系统的当前状态;基本不用管。
相关的类
ObjectAnimator 动画的执行类,后面详细介绍
ValueAnimator 动画的执行类,后面详细介绍
AnimatorSet 用于控制一组动画的执行:线性,一起,每个动画的先后执行等。
AnimatorInflater 用户加载属性动画的xml文件
TypeEvaluator 类型估值,主要用于设置动画操作属性的值。
TimeInterpolator 时间插值,上面已经介绍。
总的来说,属性动画就是,动画的执行类来设置动画操作的对象的属性、持续时间,开始和结束的属性值,时间差值等,然后系统会根据设置的参数动态的变化对象的属性。
3、ObjectAnimation的实现3.1属性动画
private void suofang() { //缩放 ObjectAnimator animator4 = ObjectAnimator.ofFloat(textView, "scaleX", 1f, 3f, 1f); animator4.setDuration(2000); animator4.start(); }
private void pingyiYzhou() { //Y轴平移 ObjectAnimator animator3 = ObjectAnimator.ofFloat(textView, "translationY", 0f, 350f, 0f); animator3.setDuration(2000); animator3.start(); } private void xuanzhuan() { //旋转 ObjectAnimator animator1 = ObjectAnimator.ofFloat(textView, "rotation", 0f, 360f, 0f); animator1.setDuration(2000); animator1.start(); } //渐变 private void jianbian() { ObjectAnimator animator = ObjectAnimator.ofFloat(textView, "alpha", 1f, 0f, 1f); animator.setDuration(2000); animator.start(); }缩放的实现(参数一:表明要执行动画的控件,参数二:表明要执行的动画类型,参数三----参数N:表明动画执行的轨迹)
3.2组合动画
//组合 边平移边旋转边渐变 private void setAnim() { ObjectAnimator animator1 = ObjectAnimator.ofFloat(textView, "translationY", 0f, 350f, 0f); ObjectAnimator animator2 = ObjectAnimator.ofFloat(textView, "rotation", 0f, 360f, 0f); ObjectAnimator animator3 = ObjectAnimator.ofFloat(textView, "alpha", 1f, 0f, 1f); AnimatorSet animatorSet = new AnimatorSet(); animatorSet.play(animator1).with(animator2).with(animator3); animatorSet.setDuration(3000); animatorSet.start(); }组合动画用到AnimationorSet来存需要执行的动画,用play设置执行的顺序,with同时,after之后执行。
Duration执行时间 start开始执行。
MainActivity中
button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //渐变 // jianbian(); //旋转 // xuanzhuan(); //Y轴平移 // pingyiYzhou(); //缩放 // suofang(); //组合 边平移边旋转边渐变 setAnim(); }调取相应的方法即可。