Android 左右滑動切換頁面或Activity的效果實現

來源:互聯網
上載者:User

對於Android案頭可以用手勢左右滑動進行切換。或者大家用過iReader的一定被其豐富的手勢折服吧。現在看看自己的多個Activy之間如何切換呢

 

1、需要繼承OnGestureListener和OnDoubleTapListener,如下:

Java代碼  
  1. public
     
    class
     ViewSnsActivity 
    extends
     Activity 
    implements
     OnTouchListener, OnGestureListener  
public class ViewSnsActivity extends Activity implements OnTouchListener, OnGestureListener

 

2、在添加mGestureDetector的定義,並在
ViewSnsActivity的onCreate函數中加入其頁面配置的setOnTouchListener事件

 

Java代碼  
  1. GestureDetector mGestureDetector;  
GestureDetector mGestureDetector;

 

 

Java代碼  
  1. public
     
    void
     onCreate(Bundle savedInstanceState) {  
  2.         super
    .onCreate(savedInstanceState);  
  3.         setContentView(R.layout.view_sns_activity);  
  4.           
  5.         mGestureDetector = new
     GestureDetector((OnGestureListener) 
    this
    );    
  6.         LinearLayout viewSnsLayout = (LinearLayout)findViewById(R.id.viewSnsLayout);    
  7.         viewSnsLayout.setOnTouchListener(this
    );    
  8.         viewSnsLayout.setLongClickable(true
    );    
  9.     }  
public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.view_sns_activity);                mGestureDetector = new GestureDetector((OnGestureListener) this);          LinearLayout viewSnsLayout = (LinearLayout)findViewById(R.id.viewSnsLayout);          viewSnsLayout.setOnTouchListener(this);          viewSnsLayout.setLongClickable(true);      }

 

3、重載onFling函數

Java代碼  
  1.     
    public
     
    boolean
     onFling(MotionEvent e1, MotionEvent e2, 
    float
     velocityX,  
  2.             float
     velocityY) {  
  3.           
  4.         if
     (e1.getX()-e2.getX() > snsConstant.getFlingMinDistance()  
  5.                 && Math.abs(velocityX) > snsConstant.getFlingMinVelocity()) {  
  6.   
  7. //          切換Activity
      
  8. //          Intent intent = new Intent(ViewSnsActivity.this, UpdateStatusActivity.class);
      
  9. //          startActivity(intent);
      
  10.             Toast.makeText(this

    "向左手勢"
    , Toast.LENGTH_SHORT).show();  
  11.         } else
     
    if
     (e2.getX()-e1.getX() > snsConstant.getFlingMinDistance()  
  12.                 && Math.abs(velocityX) > snsConstant.getFlingMinVelocity()) {  
  13.               
  14. //          切換Activity
      
  15. //          Intent intent = new Intent(ViewSnsActivity.this, UpdateStatusActivity.class);
      
  16. //          startActivity(intent);
      
  17.             Toast.makeText(this

    "向右手勢"
    , Toast.LENGTH_SHORT).show();  
  18.         }  
  19.           
  20.         return
     
    false
    ;    
  21.     }  
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {if (e1.getX()-e2.getX() > snsConstant.getFlingMinDistance()&& Math.abs(velocityX) > snsConstant.getFlingMinVelocity()) {// 切換Activity//Intent intent = new Intent(ViewSnsActivity.this, UpdateStatusActivity.class);//startActivity(intent);Toast.makeText(this, "向左手勢", Toast.LENGTH_SHORT).show();} else if (e2.getX()-e1.getX() > snsConstant.getFlingMinDistance()&& Math.abs(velocityX) > snsConstant.getFlingMinVelocity()) {//切換Activity//Intent intent = new Intent(ViewSnsActivity.this, UpdateStatusActivity.class);//startActivity(intent);Toast.makeText(this, "向右手勢", Toast.LENGTH_SHORT).show();}return false;  }

其中SnsConstant如下:

Java代碼  
  1. public
     
    class
     SnsConstant {  
  2.     private
     
    static
     
    final
     
    int
     FLING_MIN_DISTANCE = 
    50
    ;    
  3.     private
     
    static
     
    final
     
    int
     FLING_MIN_VELOCITY = 
    0
    ;  
  4.       
  5.     public
     
    static
     
    int
     getFlingMinDistance() {  
  6.         return
     FLING_MIN_DISTANCE;  
  7.     }  
  8.     public
     
    static
     
    int
     getFlingMinVelocity() {  
  9.         return
     FLING_MIN_VELOCITY;  
  10.     }  
  11. }  
public class SnsConstant {    private static final int FLING_MIN_DISTANCE = 50;      private static final int FLING_MIN_VELOCITY = 0;    public static int getFlingMinDistance() {return FLING_MIN_DISTANCE;}public static int getFlingMinVelocity() {return FLING_MIN_VELOCITY;}}

 

4、重載onTouch函數

 

Java代碼  
  1. public
     
    boolean
     onTouch(View v, MotionEvent event) {  
  2.     return
     mGestureDetector.onTouchEvent(event);  
  3. }  
public boolean onTouch(View v, MotionEvent event) {return mGestureDetector.onTouchEvent(event);}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.