简体   繁体   English

将ViewPager触摸事件调度到基础视图

[英]Dispatching ViewPager touch events to underlying view

I have a ViewPager that has 2 pages. 我有一个有2页的ViewPager。 On 1 of them there is a custom view along with some other widgets. 在其中的一个上,有一个自定义视图以及其他一些小部件。 What I want is to disable paging if the touch event was used by that custom view. 我想要的是如果该自定义视图使用了触摸事件,则禁用分页。

Here's the relevant code from my custom view: 这是我自定义视图中的相关代码:

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;
    }
}

The ViewPager is a normal one, no methods overridden. ViewPager是正常的,没有方法被覆盖。 So, what methods must I override and how so that if the scroll event is located inside the view area, that event is no longer passed to the ViewPager, while if a swipe outside of the view, the ViewPager works normally. 因此,我必须重写哪些方法,以及如何在滚动事件位于视图区域内的情况下将该事件不再传递给ViewPager,而如果在视图外部滑动,则ViewPager可以正常工作。 I'm guessing I shouldn't call super on some methods but I'm not sure. 我猜我不应该在某些方法上调用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.

相关问题 调度触摸事件 - dispatching touch events 将触摸事件从自定义视图转发到ViewPager - Forward touch events from custom View to ViewPager 调度GestureEvent(TouchEvent)以在Viewpager中查看 - Dispatching GestureEvent (TouchEvent) to View in Viewpager 如何防止自定义视图将触摸事件传递给父viewpager - How to prevent a custom view passing touch events to parent viewpager Android:如何使DrawerLayout不会将触摸事件传递给基础视图 - Android: How do I keep DrawerLayout from passing touch events to the underlying view 单击透明区域时将触摸事件传递给基础视图,但允许单击按钮 - Pass touch events to underlying view when click on transparent area, but allow clicks on buttons android传递在视图剪辑边界之外绘制的子视图的触摸事件(ViewPager第1页到第2页) - android Passing touch events of a Child view drawn outside of view clip bounds (ViewPager Page 1 to Page 2) 拦截然后将触摸事件传递给基础应用 - Intercept and then Pass on touch events to the underlying app Android上的哪个进程/库负责向应用程序分配触摸事件? - What process/library on Android is responsible for dispatching touch events to applications? 将触摸事件分配给ViewPager的未聚焦片段 - Dispatch touch events to ViewPager's unfocused fragments
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM