Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android 實現swipe的手勢

Android 實現swipe的手勢

編輯:關於android開發


        Android SDK提供了一個listener類來偵測各種不同的手勢:

        SimpleOnGestureListener.  你只需要實現自己所關心的手勢就可以了.
        Swipe在android裡面是叫Fling  

        首先創建自己的一個手勢detector類:

java代碼:
class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
}


       一個劃動的手勢有幾個特征, 比如是在x或者y軸上近乎直線的劃動, 中途路徑的偏差不能太大, 而且劃動需要一定的速度, 所以我們定義幾個定量:

java代碼:
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;


       然後在onFling方法中, 判斷是不是一個合理的swipe動作:

java代碼:
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
viewFlipper.setInAnimation(slideLeftIn);
viewFlipper.setOutAnimation(slideLeftOut);
viewFlipper.showNext();
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
viewFlipper.setInAnimation(slideRightIn);
viewFlipper.setOutAnimation(slideRightOut);
viewFlipper.showPrevious();
}


        這裡的viewFlipper是含有多個view的一個container, 可以很方便的調用prev/next view, 加上animation動畫, 可以達到一些不錯的效果:

java代碼:
viewFlipper = (ViewFlipper)findViewById(R.id.flipper);
slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in);
slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_left_out);
slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_right_in);
slideRightOut = AnimationUtils.loadAnimation(this, R.anim.slide_right_out);


       自定義的animation可以查看具體的XML, 比如從左邊進來的一個動畫:

java代碼:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="800"/>
</set>


       當然最後不要忘記在你的Activity中override onTouch方法來獲取手勢action:

java代碼:
@Override
public boolean onTouchEvent(MotionEvent event) {
if (gestureDetector.onTouchEvent(event))
return true;
else
return false;
}

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved