android.widget.ViewFlipper 类可以实现不同View 之间的切换
要实现View切换,关键是通过ViewFlipper 类的setInAnimation 和setOutAnimation方法设置下一个View进入和上一个View出去的动画
在本示例中,要为水平移动和淡入淡出效果分别编写两个动画文件。水平移动的动画文件内容如下:
translate_in.xml
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@anim/linear_interpolator" android:fromXDelta="320" android:toDelta="0" android:fromYDelta="0" android:toDelta="0" android:duration="3000" />
translate_out.xml
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@anim/linear_interpolator" android:fromXDelta="0" android:toDelta="-320" android:fromYDelta="0" android:toDelta="0" android:duration="3000" />
淡入淡出效果的动画文件如下:
alpha_in.xml
<alpha xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator" android:fromAlpha="0" android:toAlpha="1" android:duration="2000" />
alpha_out.xml
<alpha xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate|_interpolator" android:fromAlpha="1" android:toAlpha="0" android:duration="2000" />
下面是触摸事件方法的代码:
public boolean onTouch(View view, MotionEvent event)
{
switch (view.getId())
{
case R.id.imageview1:
viewFlipper.setInAnimation(translateIn);
viewFlipper.setOutAnimation(translateOut);
break;
case R.id.imageview2:
viewFlipper.setInAnimation(alphaIn);
viewFlipper.setOutAnimation(alphaOut);
break;
case R.id.imageview3:
viewFlipper.setInAnimation(translateIn);
viewFlipper.setOutAnimation(translateOut);
break;
}
viewFlipper.showNext();
return false;
}
示意图
具体代码请参见 ch11_viewflipper 工程