防止在内部视图的onTouch上滑动ViewPager2 [英] Prevent Swiping of ViewPager2 when onTouch of inner view

查看:538
本文介绍了防止在内部视图的onTouch上滑动ViewPager2的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个ViewPager2,里面有一个片段,

I have a ViewPager2 with a fragment inside,

我有一个带有某些触摸逻辑的自定义视图,其中涉及移动手指。

in the fragment, I have a custom view with certain touch logic that involves moving the finger.

当内部视图拦截触摸事件时,如何防止ViewPager滑动?

how do I prevent the ViewPager from swiping while the inner view intercepts the touch event?

override fun onTouchEvent(event: MotionEvent?): Boolean {
    if (event?.action == MotionEvent.ACTION_DOWN || event?.action == MotionEvent.ACTION_MOVE) {
       //Do some stuff here
    }
    return true
}

推荐答案

为内部视图设置OnTouchListener。在 onTouch()方法中,调用:

Set OnTouchListener for inner view. In onTouch() method, call:

viewPager.requestDisallowInterceptTouchEvent(true)

ViewPager在 onInterceptTouchEvent()。上面的代码可以防止ViewPager调用 onInterceptTouchEvent()。滑动时,ViewPager在 onInterceptTouchEvent()中返回true,这也可以防止将触摸事件传递给子视图。因此,禁止拦截允许子视图处理触摸事件。

ViewPager handles its swiping motion in onInterceptTouchEvent(). Above code prevents ViewPager from calling onInterceptTouchEvent(). When you're swiping, ViewPager returns true in onInterceptTouchEvent() which also prevents touch events to be passed to child views. Therefore disallowing intercept allows child views to handle touch events.

在不使用内部视图时设置回 false

Set back to false when the inner view is not being touched.

根据我的经验, onInterceptTouchEvent()可以防止 onTouchEvent()。它不会阻止 OnTouchListener 。因此,这里的关键是为内部视图设置 OnTouchListener

From my experience, onInterceptTouchEvent() prevents onTouchEvent(). It does not prevent OnTouchListener. So the key here is to set up OnTouchListener for the inner view.

这篇关于防止在内部视图的onTouch上滑动ViewPager2的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆