1、布局文件:activity_animation_demo.xml
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.xw.firstapp.MainActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="10dp" android:text="动画演示" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:layout_margin="5dp" android:background="@android:color/black" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="clk_starScaleAnimation" android:text="启动缩放动画" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="clk_startTransationAnimation" android:text="启动位移动画" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="clk_startRoationAnimation" android:text="启动旋转动画" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="clk_startAlphaAnimation" android:text="启动透明度动画" /> <TextView android:id="@+id/aty_animation_demo_target" android:layout_width="100dp" android:layout_height="100dp" android:layout_gravity="center" android:background="@android:color/holo_blue_dark" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:text="差值器" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:layout_margin="5dp" android:background="@android:color/black" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="clk_bouceInterpolator" android:text="测试弹跳差值器" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="clk_overShootInterpolator" android:text="测试OverShoot差值器" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="clk_accelerateInterpolator" android:text="测试加速差值器" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="clk_decelerateInterpolator" android:text="测试减速差值器" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:layout_margin="5dp" android:background="@android:color/black" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="clk_listener" android:text="测试属性动画监听器" /> </LinearLayout> </ScrollView>
2、activity文件:AnimationDemoActivity
package com.xw.firstapp; import android.animation.Animator; import android.animation.ObjectAnimator; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.animation.AccelerateDecelerateInterpolator; import android.view.animation.AccelerateInterpolator; import android.view.animation.BounceInterpolator; import android.view.animation.DecelerateInterpolator; import android.view.animation.OvershootInterpolator; import android.widget.TextView; import android.widget.Toast; /** * 动画Demo的Activity * */ public class AnimationDemoActivity extends Activity { private TextView tv_Target;// 动画被作用的View @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_animation_demo); tv_Target = (TextView) findViewById(R.id.aty_animation_demo_target); } /** * 点击开始动画的执行函数 * * @param v * */ public void clk_starScaleAnimation(View v) { // 创建一个动画对象(作用在tv_Target身上,对x轴方向进行变换) // 其中(1,0,3,0,1)为可变参数,标识tv_Target从原来大小(1)缩放为0,然后变换为原来3倍,再缩放成0,再变为原大小(1) ObjectAnimator animator_scaleX = ObjectAnimator.ofFloat(tv_Target, View.SCALE_X, 1, 0, 3, 0, 1); // 为动画设置持续时间 2秒 animator_scaleX.setDuration(1000 * 2); // 启动动画 animator_scaleX.start(); // 创建一个动画对象(作用在tv_Target身上,对y轴方向进行缩放变换) // 其中(1,0,1)为可变参数,标识tv_Target的高度从原来大小(1)缩放到0,再变化成原来大小(1) ObjectAnimator animator_scaleY = ObjectAnimator.ofFloat(tv_Target, View.SCALE_Y, 1, 0, 1); animator_scaleY.setDuration(1000 * 2); animator_scaleY.start(); } /** * 点击开始位移动画的执行函数 * * @param v * */ public void clk_startTransationAnimation(View v) { ObjectAnimator animor_transationX = ObjectAnimator.ofFloat(tv_Target, View.TRANSLATION_X, 0, 200, -200, 0); animor_transationX.setDuration(1000 * 2); animor_transationX.start(); ObjectAnimator animor_transationY = ObjectAnimator.ofFloat(tv_Target, View.TRANSLATION_Y, 0, 400, -100, 0); animor_transationY.setDuration(1000 * 2); animor_transationY.start(); } /** * 点击开始旋转动画的执行函数 * * @param v * */ public void clk_startRoationAnimation(View v) { ObjectAnimator animator_rotationX = ObjectAnimator.ofFloat(tv_Target, View.ROTATION_X, 0, 180, 0); animator_rotationX.setDuration(1000 * 2); animator_rotationX.start(); ObjectAnimator animator_rotationY = ObjectAnimator.ofFloat(tv_Target, View.ROTATION_Y, 0, 900, 0); animator_rotationY.setDuration(1000 * 2); animator_rotationY.start(); ObjectAnimator animator_rotation = ObjectAnimator.ofFloat(tv_Target, View.ROTATION, 0, 180, 0); animator_rotation.setDuration(1000 * 2); // 添加动画监听器 animator_rotation.addListener(new Animator.AnimatorListener() { // 动画开始执行的函数 @Override public void onAnimationStart(Animator animation) { Toast.makeText(AnimationDemoActivity.this, "动画停止啦~~~", Toast.LENGTH_SHORT).show(); } // 动画结束执行的函数 @Override public void onAnimationRepeat(Animator animation) { Toast.makeText(AnimationDemoActivity.this, "动画停止啦~~~", Toast.LENGTH_SHORT).show(); } // 动画被取消执行的函数 @Override public void onAnimationEnd(Animator animation) { } // 动画重复播放时的函数 @Override public void onAnimationCancel(Animator animation) { } }); // animator_rotation.setInterpolator(new DecelerateInterpolator());// // 慢慢变慢的插值器 // animator_rotation.setInterpolator(new AccelerateInterpolator());// // 慢慢变快的插值器 // animator_rotation.setInterpolator(new // AccelerateDecelerateInterpolator());// 先快后慢的插值器 // animator_rotation.setInterpolator(new BounceInterpolator());// 弹跳插值器 animator_rotation.start(); } /** * 点击开始透明度动画的执行函数 * * @param v * */ public void clk_startAlphaAnimation(View v) { ObjectAnimator animator_alpha = ObjectAnimator.ofFloat(tv_Target, View.ALPHA, 0, 0.5f, 1); animator_alpha.setDuration(1000 * 2); animator_alpha.start(); } /** * 开始差值器演示 * * @param v * */ public void clk_bouceInterpolator(View v) { ObjectAnimator animator_translation_x = ObjectAnimator.ofFloat( tv_Target, View.TRANSLATION_X, 0, 200); animator_translation_x.setDuration(1000 * 1); animator_translation_x.start(); // 创建并设置一个差值器 animator_translation_x.setInterpolator(new BounceInterpolator());// 弹跳插值器 } /** * overShoot差值器 * * @param v * */ public void clk_overShootInterpolator(View v) { ObjectAnimator animator_translation_x = ObjectAnimator.ofFloat( tv_Target, View.TRANSLATION_X, 0, 200); animator_translation_x.setDuration(1000 * 1); animator_translation_x.start(); // 创建并设置一个差值器 animator_translation_x.setInterpolator(new OvershootInterpolator());// OverShoot插值器 } /** * 加速差值器 * * @param v * */ public void clk_accelerateInterpolator(View v) { ObjectAnimator animator_translation_x = ObjectAnimator.ofFloat( tv_Target, View.TRANSLATION_X, 0, 200); animator_translation_x.setDuration(1000 * 1); animator_translation_x.start(); // 创建并设置一个差值器 animator_translation_x.setInterpolator(new AccelerateInterpolator());// 加速插值器 } /** * 减速差值器 * * @param v * */ public void clk_decelerateInterpolator(View v) { ObjectAnimator animator_translation_x = ObjectAnimator.ofFloat( tv_Target, View.TRANSLATION_X, 0, 200); animator_translation_x.setDuration(1000 * 1); animator_translation_x.start(); // 创建并设置一个差值器 animator_translation_x.setInterpolator(new DecelerateInterpolator());// 减速插值器 } /** * 测试监听器 * * @param v * */ public void clk_listener(View v){ ObjectAnimator animator_translation_x = ObjectAnimator.ofFloat( tv_Target, View.TRANSLATION_X, 0, 200); animator_translation_x.setDuration(1000 * 3); //创建一个属性动画监听器 animator_translation_x.addListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { Toast.makeText(AnimationDemoActivity.this, "动画开始啦~~~~~~",Toast.LENGTH_SHORT).show(); } @Override public void onAnimationRepeat(Animator animation) { Toast.makeText(AnimationDemoActivity.this, "动画开始重复啦~~~~~~",Toast.LENGTH_SHORT).show(); } @Override public void onAnimationEnd(Animator animation) { Toast.makeText(AnimationDemoActivity.this, "动画结束啦~~~~~~",Toast.LENGTH_SHORT).show(); } @Override public void onAnimationCancel(Animator animation) { } }); animator_translation_x.setRepeatCount(3);//-1表示无限重复 animator_translation_x.start(); } }