一.原理
实现动画的原理:通过不断控制 值 的变化,再不断 手动 赋给对象的属性,从而实现动画效果。如下图:

二.整型:ValueAnimator.ofInt()
1.作用
将初始值 以整型数值的形式 过渡到结束值,即估值器是整型估值器 - IntEvaluator
。
1
| public static ValueAnimator ofInt(int... values)
|
2.Java代码
① 相关的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| public static ValueAnimator ofInt(int... values)
public ValueAnimator setDuration(long duration)
public void setRepeatCount(int value)
public void setStartDelay(long startDelay)
public void setRepeatMode(@RepeatMode int value)
public void addUpdateListener(AnimatorUpdateListener listener) public static interface AnimatorUpdateListener { void onAnimationUpdate(ValueAnimator animation); } public Object getAnimatedValue()
|
② 实战小例子以及运行效果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| public class MainActivity extends AppCompatActivity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
final View view = findViewById(R.id.btn_animation);
view.post(new Runnable() { @Override public void run() { final ValueAnimator valueAnimator = ValueAnimator.ofInt(view.getWidth(), 500);
valueAnimator.setDuration(1000);
valueAnimator.setRepeatCount(1);
valueAnimator.setStartDelay(1000);
valueAnimator.setRepeatMode(ValueAnimator.RESTART);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { int currentValue = (int) animation.getAnimatedValue();
ViewGroup.LayoutParams layoutParams = view.getLayoutParams(); layoutParams.width = currentValue; view.setLayoutParams(layoutParams); } });
view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { valueAnimator.start(); } }); } }); } }
|

3.Xml方式
- 系统默认不会在 res 文件夹下面创建 animator 文件夹,我们需要手动创建 animator 文件夹。我们的动画xml文件就存放在这里面。
- 我们使用的
AnimatorInflater
的public static Animator loadAnimator(Context context, @AnimatorRes int id)
方法加载我们的动画xml文件。
① 相关的属性
1 2 3 4 5 6 7 8 9 10 11
| <animator /> android:valueType android:valueFrom android:valueTo android:duration android:startOffset android:repeatCount android:repeatMode android:interpolator
|
② 实战小例子以及运行效果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| <?xml version="1.0" encoding="utf-8"?> <animator xmlns:android="http://schemas.android.com/apk/res/android" android:valueType="intType" android:valueFrom="231" android:valueTo="500"
android:duration="1000" android:startOffset="1000" android:repeatCount="1" android:repeatMode="restart" />
public class MainActivity extends AppCompatActivity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
final View view = findViewById(R.id.btn_animation);
final ValueAnimator valueAnimator = (ValueAnimator)AnimatorInflater.loadAnimator(this, R.animator.value_animator);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { int currentValue = (int) animation.getAnimatedValue();
ViewGroup.LayoutParams layoutParams = view.getLayoutParams(); layoutParams.width = currentValue; view.setLayoutParams(layoutParams); } });
view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { valueAnimator.start(); } }); } }
|

三.浮点型:ValueAnimator.oFloat()
1.作用
将初始值 以浮点型数值的形式 过渡到结束值,即估值器是浮点型估值器 - FloatEvaluator
。
1
| public static ValueAnimator ofFloat(float... values)
|
和ValueAnimator.oFInt()的用法相同。
四.颜色:ValueAnimator.ofArgb()
1.作用ArgbEvaluator:
将初始值 以Argb类型的形式 过渡到结束值,即估值器是Argb型估值器 - ArgbEvaluator。
1
| public static ValueAnimator ofArgb(int... values)
|
和ValueAnimator.oFInt()的用法相同。
五.对象:ValueAnimator.ofObject()
1.作用
将初始值 以对象的形式 过渡到结束值,需要自定义估值器(TypeEvaluator
)。
1 2 3 4 5 6 7 8 9 10 11 12
| public static ValueAnimator ofObject(TypeEvaluator evaluator, Object... values) { ValueAnimator anim = new ValueAnimator(); anim.setObjectValues(values); anim.setEvaluator(evaluator); return anim; }
public static ValueAnimator ofInt(int... values) { ValueAnimator anim = new ValueAnimator(); anim.setIntValues(values); return anim; }
|
详细内容查看:Android动画-估值器(TypeEvaluator)
六.动画的控制
1 2 3 4 5 6 7 8 9 10 11
| valueAnimator.start();
valueAnimator.end();
valueAnimator.cancel();
valueAnimator.pause();
valueAnimator.resume();
|
结束和取消的区别是,结束会直接让动画定位到结束的位置,而取消会让动画停在当前执行的位置。
参考文章
Android:这份属性动画的核心使用类ValueAnimator学习指南请收好!