2015-12-30 26 views
0

如何構建同時檢測滑動和點擊事件的ViewPager?如何構建同時檢測滑動和點擊事件的ViewPager

我試着創建一個自定義的ViewPager類,它覆蓋了onInterceptTouchEvent來註冊點擊和滑動事件(因爲我知道它們互相干擾),這就是我被卡住了。

如何繼續?

public class CustomViewPager extends ViewPager { 

    public CustomViewPager(Context context) { 
     super(context); 
    } 

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

    @Override 
    public null onInterceptTouchEvent(MotionEvent ev) { 
     //Enter the code here to communicate a touch event 
     super.onInterceptTouchEvent(ev); 

    } 
} 
+0

找到了答案[這裏](http://stackoverflow.com/questions/16350987/viewpager-onitemclicklistener) –

回答

0

如果你不使用自定義觸摸監聽器您可以將適配器內建立監聽到網頁內容與默認listerner(如found here)。

是這樣的:

@Override 
public Object instantiateItem(View collection, final int pos) { //have to make final so we can see it inside of onClick() 

    LayoutInflater inflater = (LayoutInflater) collection.getContext() 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    View page = inflater.inflate(R.layout.YOUR_PAGE, null); 

    page.setOnClickListener(new OnClickListener(){ 
     public void onClick(View v){ 
      //this will log the page number that was click 
      Log.i("TAG", "This page was clicked: " + pos); 
     } 
    }); 

    ((ViewPager) collection).addView(page, 0); 

    return page; 
} 
1

如果您在問題的示例中使用自定義觸摸偵聽器,則支持點擊的技巧是使用手勢檢測器。

public class CustomViewPager extends ViewPager { 

    private GestureDetector mGesture; 

    public CustomViewPager(Context context) { 
     super(context); 
     init(); 
    } 

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

    private void init() { 
     mGesture = new GestureDetector(getContext(), new GestureDetector.SimpleOnGestureListener() { 

      @Override 
      public boolean onSingleTapConfirmed(MotionEvent e) { 
       //Handle your click here 
       return true; 
      } 

     }); 
    } 

    @Override 
    public null onInterceptTouchEvent(MotionEvent ev) { 
     if (!mGesture.onTouchEvent(event)) { 
      super.onInterceptTouchEvent(ev); 
     } 
    } 

} 
+0

謝謝,但我已經掛在評論答案。 –

+0

沒有你在評論中鏈接到* an *答案。這並不意味着這種方法無效。如果你想讓你的鏈接成爲答案,請回答。以後瀏覽此問題的人會查找接受的答案,而不是評論 –

+0

如果可以,我會將我的問題標記爲重複。我會做出答覆。 –

相關問題