Android ViewFliper实现屏幕切换


ViewFlipper 可以包含多个View 且View之间的切换可以通过Animation来设置切换效果,如渐变。

xml布局:

ViewFlipper里面有四个页面,下面通过手势切换页面。

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:Android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical" android:layout_width="fill_parent"  
  4.     android:background="@drawable/static_bg_snowy_day"  
  5.     android:layout_height="fill_parent">  
  6.     <ViewFlipper android:id="@+id/flipper"  
  7.         android:layout_width="fill_parent" android:layout_height="fill_parent">  
  8.         <include android:id="@+id/firstlayout" layout="@layout/first"></include>  
  9.         <include android:id="@+id/secondlayout" layout="@layout/second"></include>  
  10.         <include android:id="@+id/thirdlayout" layout="@layout/third"></include>  
  11.         <include android:id="@+id/fourthlayout" layout="@layout/fourth"></include>  
  12.     </ViewFlipper>  
  13. </LinearLayout>  


 
  1. public class viewflipper extends Activity implements OnGestureListener,  
  2.         OnTouchListener {  
  3.     private ViewFlipper mFlipper;  
  4.     GestureDetector mGestureDetector;  
  5.     private int mCurrentLayoutState;  
  6.     private static final int FLING_MIN_DISTANCE = 100;  
  7.     private static final int FLING_MIN_VELOCITY = 200;  
  8.   
  9.     @Override  
  10.     public void onCreate(Bundle savedInstanceState) {  
  11.         super.onCreate(savedInstanceState);  
  12.         setContentView(R.layout.flipper);  
  13.         mFlipper = (ViewFlipper) findViewById(R.id.flipper);  
  14.         // 注册一个用于手势识别的类   
  15.         mGestureDetector = new GestureDetector(this);  
  16.         // 给mFlipper设置一个listener   
  17.         mFlipper.setOnTouchListener(this);  
  18.         mCurrentLayoutState = 0;  
  19.         // 允许长按住ViewFlipper,这样才能识别拖动等手势   
  20.         mFlipper.setLongClickable(true);  
  21.     }  
  22.   
  23.     public boolean onDown(MotionEvent e) {  
  24.   
  25.         return false;  
  26.     }  
  27.   
  28.     /** 
  29.      * 用户按下触摸屏、快速移动后松开即触发这个事件 e1:第1个ACTION_DOWN MotionEvent e2:最后一个ACTION_MOVE 
  30.      * MotionEvent velocityX:X轴上的移动速度,像素/秒 velocityY:Y轴上的移动速度,像素/秒 触发条件 : 
  31.      * X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒 
  32.      */  
  33.     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,  
  34.             float velocityY) {  
  35.         if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE  
  36.                 && Math.abs(velocityX) > FLING_MIN_VELOCITY) {  
  37.             // 当像左侧滑动的时候   
  38.             // 设置View进入屏幕时候使用的动画   
  39.             mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,  
  40.      R.anim.push_left_in))  
  41.             // 设置View退出屏幕时候使用的动画   
  42.             mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,  
  43.      R.anim.push_left_out));  
  44.             mFlipper.showNext();  
  45.         } else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE  
  46.                 && Math.abs(velocityX) > FLING_MIN_VELOCITY) {  
  47.             // 当像右侧滑动的时候   
  48.             mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,  
  49.      R.anim.push_right_in));  
  50.             mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,  
  51.      R.anim.push_right_out));  
  52.             mFlipper.showPrevious();  
  53.         }  
  54.         return false;  
  55.     }  
  56.   
  57.     public void onLongPress(MotionEvent e) {  
  58.     }  
  59.   
  60.     public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,  
  61.             float distanceY) {  
  62.         return false;  
  63.     }  
  64.   
  65.     public void onShowPress(MotionEvent e) {  
  66.     }  
  67.   
  68.     public boolean onSingleTapUp(MotionEvent e) {  
  69.         return false;  
  70.     }  
  71.   
  72.     public boolean onTouch(View v, MotionEvent event) {  
  73.         // 一定要将触屏事件交给手势识别类去处理(自己处理会很麻烦的)   
  74.         return mGestureDetector.onTouchEvent(event);  
  75.     }  
  76. }  

进入动画

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">  
  3.  <translate android:fromXDelta="100%p" android:toXDelta="0"  
  4.   android:duration="500" />  
  5.  <alpha android:fromAlpha="0.1" android:toAlpha="1.0"  
  6.   android:duration="500" />  
  7. </set>  

相关内容