补间动画是指定开始和结束的图像状态,自动生成需要显示的过度图像的动画。补间动画又分为四种:移动,缩放,旋转,通明度。下面以移动补间动画来做简单说明,效果是把一个ImageView从左上角,向右下方向移动,然后返回到起始点,中间对动画状态进行监听,效果如图:

下面简述其主要步骤:
1、定义动画文件:
Java代码  - <translate xmlns:android="http://schemas./apk/res/android"
- android:duration="5000"
- android:fromXDelta="0"
- android:fromYDelta="0"
- android:interpolator="@android:anim/accelerate_decelerate_interpolator"
- android:toXDelta="200"
- android:toYDelta="300" />
说明:
- android:interpolator:动画渲染器,有三种渲染器可以设
置:accelerate_decelerate_interpolator,accelerate_interpolator,decelerate_interpolator, 它们分别对应的效果是:开始加速中间减速,一直加速,一直减速。
- fromXDelta;动画起始位置的X坐标;
- fromYDelta:动画起始位置的Y坐标;
- toXDelta:动画结束位置的X坐标;
- toYDelta:动画结束位置的Y坐标;
- duration:动画持续时间,单位毫秒。
2、加载并启动动画:
Java代码  - import android.app.Activity;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.animation.Animation;
- import android.view.animation.AnimationUtils;
- import android.view.animation.Animation.AnimationListener;
- import android.widget.ImageView;
-
- public class TranslateActivity extends Activity implements AnimationListener {
-
- private static final String TAG = "Translate";
-
- private ImageView imageView;
- private Animation translateAnimation;
-
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
-
- imageView = (ImageView) findViewById(R.id.imageView1);
-
- // 装载动画文件
- translateAnimation = AnimationUtils.loadAnimation(this, R.xml.translate);
-
- // 设置动画监听器
- translateAnimation.setAnimationListener(this);
-
- // 设置重复次数
- translateAnimation.setRepeatCount(1);
-
- // 设置重复模式
- translateAnimation.setRepeatMode(Animation.REVERSE);
-
- // 启动动画
- // imageView.setAnimation(translateAnimation);
- // translateAnimation.start();
-
- imageView.startAnimation(translateAnimation);
-
- }
-
- @Override
- public void onAnimationEnd(Animation animation) {
- Log.i(TAG, "onAnimationEnd");
- }
-
- @Override
- public void onAnimationRepeat(Animation animation) {
- Log.i(TAG, "onAnimationRepeat");
- }
-
- @Override
- public void onAnimationStart(Animation animation) {
- Log.i(TAG, "onAnimationStart");
- }
-
- }
修改上面的某些代码,猜想效果,并和实际效果作对比,有时会发现很有趣的现象!:)
缩放动画的XML示例代码:
Java代码  - <set xmlns:android="http://schemas./apk/res/android"
- android:shareInterpolator="false" >
-
- <scale
- android:duration="500"
- android:fromXScale="1"
- android:fromYScale="0.1"
- android:pivotX="50%"
- android:pivotY="50%"
- android:startOffset="100"
- android:toXScale="1"
- android:toYScale="1.0" />
-
- </set>
旋转动画的XML示例代码如下:
Java代码  - <rotate xmlns:android="http://schemas./apk/res/android"
- android:duration="10000"
- android:fromDegrees="0"
- android:interpolator="@anim/linear_interpolator"
- android:pivotX="200%"
- android:pivotY="300%"
- android:repeatCount="infinite"
- android:repeatMode="restart"
- android:toDegrees="360" />
3、多说一句:
使用代码同样可以实现从XML加载动画一样的效果,有兴趣的话,可以试试看!:)
|