补间动画就是指开发者只需指定动画开始、动画结束“关键帧”和动画持续时间即可,而动画变化的“中间帧”由系统计算、并补齐。所以开发者无须“逐一”定义动画过程中的每一帧。下面用一个简单实例来演示在代码中设置补间动画,代码如下:
Activity:
package com.lovo.testtween; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.Animation.AnimationListener; import android.view.animation.RotateAnimation; import android.view.animation.ScaleAnimation; import android.view.animation.TranslateAnimation; import android.widget.ImageView; import android.widget.Toast; public class TestTweenActivity extends Activity { private ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); imageView = (ImageView) findViewById(R.id.main_iv); } public void click(View v) { switch (v.getId()) { case R.id.main_btn_alpha: // AlphaAnimation:透明动画的类 AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0.1f); // 设置动画持续时间 alphaAnimation.setDuration(3000); // 保持动画后的状态 alphaAnimation.setFillAfter(true); // 重复的次数 alphaAnimation.setRepeatCount(-1); // 重复的类型 RESTART - 每次从头开始播放动画; REVERSE - 反向播放动画 alphaAnimation.setRepeatMode(AlphaAnimation.RESTART); // 让图片组件开始加载动画 imageView.startAnimation(alphaAnimation); break; case R.id.main_btn_rotate: // RotateAnimation:旋转动画的类 RotateAnimation rotateAnimation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); // 设置动画持续时间 rotateAnimation.setDuration(3000); // 保持动画后的状态 rotateAnimation.setFillAfter(true); // 重复的次数 rotateAnimation.setRepeatCount(-1); // 重复的类型 RESTART - 每次从头开始播放动画; REVERSE - 反向播放动画 rotateAnimation.setRepeatMode(AlphaAnimation.RESTART); // 让图片组件开始加载动画 imageView.startAnimation(rotateAnimation); break; case R.id.main_btn_scale: // ScaleAnimation:缩放动画的类。从图片的中心位置开始缩放 ScaleAnimation scaleAnimation = new ScaleAnimation(1, 0.1f, 1, 0.1f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); // 设置动画持续时间 scaleAnimation.setDuration(3000); // 保持动画后的状态 scaleAnimation.setFillAfter(true); // 重复的次数 scaleAnimation.setRepeatCount(-1); // 重复的类型 RESTART - 每次从头开始播放动画; REVERSE - 反向播放动画 scaleAnimation.setRepeatMode(AlphaAnimation.REVERSE); // 让图片组件开始加载动画 imageView.startAnimation(scaleAnimation); break; case R.id.main_btn_translate: // TranslateAnimation:平移动画的类 TranslateAnimation translateAnimation = new TranslateAnimation(0, 150, 0, 150); // 设置动画持续时间 translateAnimation.setDuration(3000); // 保持动画后的状态 translateAnimation.setFillAfter(true); // 重复的次数 translateAnimation.setRepeatCount(-1); // 重复的类型 RESTART - 每次从头开始播放动画; REVERSE - 反向播放动画 translateAnimation.setRepeatMode(AlphaAnimation.REVERSE); // 让图片组件开始加载动画 imageView.startAnimation(translateAnimation); //为动画播放状态绑定监听器 translateAnimation.setAnimationListener(new AnimationListener(){ @Override public void onAnimationEnd(Animation animation) { Toast.makeText(TestTweenActivity.this, "动画播放结束", Toast.LENGTH_SHORT).show(); } @Override public void onAnimationRepeat(Animation animation) { Toast.makeText(TestTweenActivity.this, "动画重复播放", Toast.LENGTH_SHORT).show(); } @Override public void onAnimationStart(Animation animation) { Toast.makeText(TestTweenActivity.this, "动画开始播放", Toast.LENGTH_SHORT).show(); }}); break; } } }
布局XML:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:id="@+id/main_btn_alpha" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="click" android:text="透明" /> <Button android:id="@+id/main_btn_scale" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="click" android:text="放缩" /> <Button android:id="@+id/main_btn_translate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="click" android:text="平移" /> <Button android:id="@+id/main_btn_rotate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="click" android:text="旋转" /> </LinearLayout> <ImageView android:id="@+id/main_iv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/freedom1" /> </LinearLayout>