簡體   English   中英

將ViewPager觸摸事件調度到基礎視圖

[英]Dispatching ViewPager touch events to underlying view

我有一個有2頁的ViewPager。 在其中的一個上,有一個自定義視圖以及其他一些小部件。 我想要的是如果該自定義視圖使用了觸摸事件,則禁用分頁。

這是我自定義視圖中的相關代碼:

class OscilloscopeView extends View implements GestureDetector.OnGestureListener {

    OscilloscopeView(Context context){

        mGestureDetector = new GestureDetectorCompat(context, this);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {

        return super.onTouchEvent(event) || mGestureDetector.onTouchEvent(event);
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {

        return super.dispatchTouchEvent(event) || mGestureDetector.onTouchEvent(event);
    }

    @Override
    public boolean onDown(MotionEvent motionEvent) {
        Log.d("MDETECTOR", "onDown: " + motionEvent.toString());
        return true;
    }

    @Override
    public void onShowPress(MotionEvent motionEvent) {

    }

    @Override
    public boolean onSingleTapUp(MotionEvent motionEvent) {
        return false;
    }

    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
        int dHPos = (int) (distanceX / mWidth * points.length / 2);
        if (Utilities.around(hPosition - dHPos, 0, points.length / 4))
            hPosition -= dHPos;
        triggerLevel += (2 * distanceY / mHeight * max);
        invalidate();
        return true;
    }

    @Override
    public void onLongPress(MotionEvent motionEvent) {
        hPosition = 0;
        triggerLevel = 0;
    }

    @Override
    public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent2, float v, float v2) {
        Log.d("MDETECTOR", "onFling: " + motionEvent.toString());
        return true;
    }
}

ViewPager是正常的,沒有方法被覆蓋。 因此,我必須重寫哪些方法,以及如何在滾動事件位於視圖區域內的情況下將該事件不再傳遞給ViewPager,而如果在視圖外部滑動,則ViewPager可以正常工作。 我猜我不應該在某些方法上調用super,但是我不確定。

@Override
public boolean onTouchEvent(MotionEvent event) {

    ViewParent parent = getParent();

    parent.requestDisallowInterceptTouchEvent(true);

    return super.onTouchEvent(event) || mGestureDetector.onTouchEvent(event);
}

暫無
暫無

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

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