ViewPropertyAnimator 视图属性动画
Android 为 View 的动画操作提供一种更加便捷的用法,那就是 ViewPropertyAnimator
一般情况下,让一个 TextView 从正常状态变成透明状态,会这样写:
ObjectAnimator animator = ObjectAnimator.ofFloat(textview, "alpha", 0f); animator.start();
使用 ViewPropertyAnimator 来实现同样的效果简单易懂
textview.animate().alpha(0f);
ViewPropertyAnimator 连缀用法 ,组合多个动画,设定时长,设置 Interpolator 等
textview.animate().x(500).y(500).setDuration(5000) .setInterpolator(new BounceInterpolator());
注意点
-
整个
ViewPropertyAnimator的功能都是建立在View类新增的animate()方法之上的,这个方法会创建并返回一个ViewPropertyAnimator的实例,之后的调用的所有方法, 设置的所有属性都是通过这个实例完成的 -
使用
ViewPropertyAnimator将 动画定义完成之后 ,动画就会 自动启动并且这个机制对于组合动画也同样有效,只要我们不断地连缀新的方法,那么动画就不会立刻执行,等到所有在
ViewPropertyAnimator上设置的方法都执行完毕后,动画就会自动启动当然如果不想使用这一默认机制的话,我们也可以显式地调用
start()方法来启动动画 -
ViewPropertyAnimator的所有接口都是使用连缀的语法来设计的,每个方法的返回值都是它 自身的实例 ,因此调用完一个方法之后可以直接连缀调用它的另一个方法,这样把所有的功能都串接起来,我们甚至可以仅通过一行代码就完成任意复杂度的动画功能
范例
我们写一个 demo 使用 ViewPropertyAnimator 来实现动画效果
-
创建一个 空的 Android 项目
cn.twle.android.ViewPropertyAnimator -
修改
activity_main.xml<?xml version="1.0" encoding="utf-8" ?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/ms_textview" android:background="#ff0000" android:layout_width="64dp" android:layout_height="64dp"/> </LinearLayout>
-
修改
MainActivity.javapackage cn.twle.android.viewpropertyanimator; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.animation.BounceInterpolator; import android.widget.TextView; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView ms_textview = findViewById(R.id.ms_textview); ms_textview.animate().x(500).y(500).setDuration(5000) .setInterpolator(new BounceInterpolator()); } }