Android的控件动画效果均是基于补间动画实现的,常用的控件动画是基于ViewAnimator类进行的,其子类包含ViewFlipper、ViewSwitcher、ImageSwitcher、TextSwitcher等。下面是日历应用中关于ViewSwitcher的一个实现:
        代码:ViewSwitcher的应用
        public View switchViews(boolean forward, float xOffSet, float width) {
            float progress = Math.abs(xOffSet) / width;
            if (progress > 1.0f) {
                    progress = 1.0f;
                }
            float inFromXValue, inToXValue;
            float outFromXValue, outToXValue;
            if (forward) {
                    inFromXValue = 1.0f - progress;
                    inToXValue = 0.0f;
                    outFromXValue = -progress;
                    outToXValue = -1.0f;
            } else {
                    inFromXValue = progress - 1.0f;
                    inToXValue = 0.0f;
                    outFromXValue = progress;
                    outToXValue = 1.0f;
            }
            TranslateAnimation inAnimation = new TranslateAnimation(
                        Animation.RELATIVE_TO_SELF, inFromXValue,
                        Animation.RELATIVE_TO_SELF, inToXValue,
                        Animation.ABSOLUTE, 0.0f,
                        Animation.ABSOLUTE, 0.0f);
            TranslateAnimation outAnimation = new TranslateAnimation(
                        Animation.RELATIVE_TO_SELF, outFromXValue,
                        Animation.RELATIVE_TO_SELF, outToXValue,
                        Animation.ABSOLUTE, 0.0f,
                        Animation.ABSOLUTE, 0.0f);
            long duration = (long) (ANIMATION_DURATION * (1.0f - progress));
            inAnimation.setDuration(duration);
            outAnimation.setDuration(duration);
            mViewSwitcher.setInAnimation(inAnimation);
            mViewSwitcher.setOutAnimation(outAnimation);
            CalendarView view = (CalendarView) mViewSwitcher.getCurrentView();
            view.cleanup();
            mViewSwitcher.showNext();
            view = (CalendarView) mViewSwitcher.getCurrentView();
            view.requestFocus();
            view.reloadEvents();
            return view;
    }
        对于控件动画,对于一些常见的动画效果,并不需要开发者自行实现,下面是一个利用ViewFlipper和系统动画实现的一个实例:
        代码:ViewFlipper的应用
        package com.miaozl.test;
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.animation.AnimationUtils;
    import android.widget.ViewFlipper;
    public class ViewAnimActivity extends Activity {
	         private ViewFlipper mFlipper;
            @Override
            public void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.main);
                    mFlipper = ((ViewFlipper) this.findViewById(R.id.flipper));
                    mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_in));
                    mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_out));
                    mFlipper.startFlipping();    //循环播放
            }
    }
        下面是相应的布局文件:
        < ?xml version="1.0" encoding="utf-8"?>
    < LinearLayout xmlns:android="//schemas.android.com/apk/res/android"
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
         < ViewFlipper android:id="@+id/flipper"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:flipInterval="2000"
                android:autoStart="true">    //自动播放
		     < ImageView
		 	        android:layout_width="match_parent"
		 	        android:layout_height="match_parent"
		 	        android:layout_gravity="center_horizontal"
		 	        android:src="@drawable/photo2"
		 	        android:id="@+id/one"/>
		     < ImageView
		 	        android:layout_width="match_parent"
		 	        android:layout_height="match_parent"
		 	        android:layout_gravity="center_horizontal"
		 	        android:src="@drawable/photo3"
		 	        android:id="@+id/two"/>
	    < /ViewFlipper>  
    < /LinearLayout>
		除了淡入淡出效果外,Android还支持下推(push down)、上推(push up)、shrink fade、grow fade等多种动画效果。
        动画的进度是通过插补器(interpolator)来控制的,目前,Android支持七种插补器效果:加速减速插补器(accelerate decelerate interpolator)、加速插补器(accelerate interpolator)、预期插补器(anticipate interpolator)、预期超调插补器(anticipate_overshoot_interpolator)、弹跳插补器(bounce_interpolator)、圆插补器(cycle_interpolator)、减速插补器(decelerate interpolator)、线性插补器(linear_interpolator)、超调插补器(overshoot_interpolator)。如果没有适合读者的,读者也可以通过实现TimeInterpolator接口自定义一个自己的插补器。