2015-11-25 80 views
2

我的問題是所有的觸摸事件都被檢測到,但不是Action_Down事件。日誌結果爲事件1,2,而不是0(向下)。我的MotionEvent.ACTION_DOWN未被檢測到

這裏是我的代碼

final ViewPager homeViewPager = (ViewPager)findViewById(R.id.homeViewPager); 

    homeViewPager.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch (View v, MotionEvent event){ 
       Log.i("ViewPager", "event " + event.getAction()); 
       switch (event.getAction()) { 
        case MotionEvent.ACTION_MOVE: 
         Log.i("ViewPager", "ACTION_MOVE"); 
         break; 
        case MotionEvent.ACTION_DOWN: 
         Log.i("ViewPager", "ACTION_DOWN"); 
         break; 
        case MotionEvent.ACTION_UP: 
         Log.i("ViewPager", "ACTION_UP "); 
         break; 
       } 
      return false; 
     } 
    }); 
+0

不可能,所有的觸摸動作都以action_down開始,然後很多action_move直到Action_up完成觸摸。 – Nanoc

+0

@nanoc感謝ofr試圖幫助,但我找到了解決方案,並寫了它 – SoliQuiD

回答

4

我找到了一個很好的解釋上http://neevek.net/posts/2013/10/13/implementing-onInterceptTouchEvent-and-onTouchEvent-for-ViewGroup.html

簡單:viewpager是一個ViewGroup所以默認它通過它的(下)的觸摸事件,以孩子的意見

解決方案我重寫類與此並使用我的viewpager類

public class MyViewPager extends ViewPager { 
public MyViewPager(Context context) { 
    super(context); 
} 

public MyViewPager(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

@Override 
public boolean onInterceptTouchEvent(MotionEvent event) { 
    return true; 
} 

}