2011-11-25 175 views
2


我有一個日曆,我想讓左/右滑動和切換月份成爲可能。
是否有任何傾聽者左右滑動?
謝謝!滑動左/右的事件

+0

這個問題的答案在這裏詳細: http://stackoverflow.com/questions/937313/android-basic-gesture-detection –

回答

4

你可以用戶SimpleOnGestureListener如下面的例子:(顯然,代替實際的代碼,移動到下一首/上月的吐司)

public class SelectFilterActivity extends Activity implements OnClickListener 
{ 

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; 
private GestureDetector gestureDetector; 
View.OnTouchListener gestureListener; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    /* ... */ 

    // Gesture detection 
    gestureDetector = new GestureDetector(new MyGestureDetector()); 
    gestureListener = new View.OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
      return gestureDetector.onTouchEvent(event); 
     } 
    }; 

} 

class MyGestureDetector extends SimpleOnGestureListener { 
    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
     try { 
      if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) 
       return false; 
      // right to left swipe 
      if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
       Toast.makeText(SelectFilterActivity.this, "Left Swipe", Toast.LENGTH_SHORT).show(); 
      } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
       Toast.makeText(SelectFilterActivity.this, "Right Swipe", Toast.LENGTH_SHORT).show(); 
      } 
     } catch (Exception e) { 
      // nothing 
     } 
     return false; 
    } 

} 

然後你把它連接到您的視圖:

// Do this for each view added to the grid 
view.setOnClickListener(SelectFilterActivity.this); 
view.setOnTouchListener(gestureListener); 
+0

它不工作。 'gridview.setOnClickListener(SelectFilterActivity.this);' 錯誤: '類型SelectFilterActivity沒有外圍實例是在範圍訪問'和另一個錯誤 'gridview.setOnTouchListener(gestureListener);' 錯誤: 'gestureListener不能解決了一個變量' –

+0

那麼你需要適應你的具體情況,你沒有提供足夠的細節來編寫完整的解決方案。重要的部分是MyGestureDetector類,你需要以某種方式插入你的視圖 – Guillaume

0

SimpleOngestureListener可以捕捉onFling; 你可以重寫這個來捕捉滑動。

class MyGestureDetector extends SimpleOnGestureListener { 
    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
     try { 
      if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) 
       return false; 
      // right to left swipe 
      if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
       //do your stuff 
      } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
       //do your stuff 
      } 
     } catch (Exception e) 
     { 
      // nothing 

     } 
     return false; 
    } 
+0

我們不復制來自同一線程的另一個答案的代碼... –

+0

我們沒有...? 但不,謝謝。 我一直在使用這段代碼一段時間, 顯然有其他人。 – ron