2013-08-01 39 views
3

我的應用程序中包含一堆不同視圖的屏幕一側有一個ViewFlipper,我希望用戶能夠通過刷卡消除此問題往左邊。所以,我沒有平時...在Android中處理一個沒有消耗MotionEvent的投擲/滾動

private class SwipeDetector extends SimpleOnGestureListener { 

    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
     //Dismiss view 
    } 

    @Override 
    public boolean onDown(MotionEvent e) { 
     return true; 
    } 
} 

...然後設置ViewFlipper的onTouchListener調用的onTouchEvent在SwipeDetector。這一切都很好,但我注意到,因爲它正在消耗所有進入ViewFlipper的觸摸事件,所以當ViewFlipper本身時,我無法點擊任何東西。如果我不覆蓋onDown,或者我使它返回false,那麼TouchListener會忽略事件的其餘部分,我不會得到這個結果。如果我甚至可以在用戶觸摸ViewFlipper之後處理所有ACTION_MOVE事件,但甚至無法完成這些操作,我很高興能夠共同進行某種自定義輕掃檢測。有沒有什麼方法可以在不消耗onDown的情況下繼續監聽MotionEvent?

回答

2

對我而言,有效的方法是擴展View.OnTouchListener而不是SimpleGestureListener,並覆蓋onTouch方法。請以此作爲片段一個非常簡單的(和改善的)辦法來獲得detection.-

public boolean onTouch(View v, MotionEvent event) { 
    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: { 
      downX = event.getX(); 
      return true; 
     } 
     case MotionEvent.ACTION_UP: { 
      upX = event.getX(); 
      float deltaX = downX - upX; 

      if (Math.abs(deltaX) > MIN_DISTANCE) { 
       if (deltaX < 0) { 
        this.onLeftToRightSwipe(); 
        return true; 
       } 
       if (deltaX > 0) { 
        this.onRightToLeftSwipe(); 
        return true; 
       } 
       return true; 
      } 

      return true; 
     } 
    } 
    return false; 
} 
+0

這處理觸摸事件就好了,但仍然存在與我原來的問題相同的問題 - 它消耗觸摸事件,當我將它設置爲父視圖上的觸摸偵聽器時,我無法單擊子項中的任何內容因爲觸摸事件沒有那麼遠。 –