歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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>  
Copyright © Linux教程網 All Rights Reserved