簡體   English   中英

如何攔截ViewPager.OnPageChangeListener中的觸摸事件

[英]How to intercept touch events from ViewPager.OnPageChangeListener

我試圖禁止我的ViewPager在標簽之間滾動。 我有以下情況:

        public class MyClass extends ViewPager implements ViewPager.OnPageChangeListener, OnTouchListener {

             public MyClass() {
               setOnTouchListener(this);
             }

@Override
    public void onPageScrollStateChanged(int state) {
        Log.d("Testing", TAG + " onPageScrollStateChanged");
    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        Log.d("Testing", TAG + " onPageScrolled");
    }

    @Override
    public void onPageSelected(int position) {
        Log.d("Testing", TAG + " onPageSelected");
    }

        @Override
        public boolean onInterceptTouchEvent(MotionEvent event) {
            Log.d("Testing", "intercept");
                return false;
        }

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                Log.d("Testing", "touch2");
                    return false;
            }

        }

我通常從onPageScrolled和onPageScrollStateChanged獲取日志,但是我沒有來自onInterceptTouchEvent和onTouch的日志。 我究竟做錯了什么?

這就是我處理這個問題的方法(我的全班):

public class SelectiveViewPager extends ViewPager {
private boolean paging = true;

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

public SelectiveViewPager(Context context, AttributeSet attributeSet){
    super(context, attributeSet);
}

@Override
public boolean onInterceptTouchEvent(MotionEvent e) {
    if (paging) {
        return super.onInterceptTouchEvent(e);
    }

    return false;
}

public void setPaging(boolean p){ paging = p; }

}

如果需要,布爾paging為您提供打開和關閉此選項的選項。 如果您不需要,只需return false 如果你沒有在onTouch做任何特別的onTouch ,你不需要覆蓋它。

return true; 在你的onInterceptTouchEvent();

你的構造函數不會被稱為btw。 您是通過代碼創建視圖尋呼機還是通過xml對其進行充氣? 您需要定義正確的構造函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM