范围
有两个片段的viewpager。其中一个片段有一个布局,女巫监听 X 轴上的 onTouch 变化。
问题
布局在沿 X 轴触摸和滑动时几乎不会获得所有 Action.Move 事件。viewpager 似乎有一个返回 true 的 onInterceptTouchEvent。
问题
覆盖 viewpager 的行为以使其和我的布局一起工作是真的吗?所以完美的情况是 layout 拦截了它上面的所有 onTouch 事件,而 viewpager 管理其余的 onTouch 事件。谢谢!
有两个片段的viewpager。其中一个片段有一个布局,女巫监听 X 轴上的 onTouch 变化。
布局在沿 X 轴触摸和滑动时几乎不会获得所有 Action.Move 事件。viewpager 似乎有一个返回 true 的 onInterceptTouchEvent。
覆盖 viewpager 的行为以使其和我的布局一起工作是真的吗?所以完美的情况是 layout 拦截了它上面的所有 onTouch 事件,而 viewpager 管理其余的 onTouch 事件。谢谢!
你是对的,我相信每个滚动容器都会拦截触摸事件,但你可以阻止它。您可以在布局上放置一个触摸监听器:
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
pager.requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
pager.requestDisallowInterceptTouchEvent(false);
break;
}
}
类似的情况(但不使用 ViewPager),将它放在需要触摸事件的视图中对我有用。添加对 MotionEvents 的检查(ACTION_MOVE如果适用于您的用例)。
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_MOVE) {
this.getParent().requestDisallowInterceptTouchEvent(true);
return true;
} else {
return super.onTouchEvent(event);
}
}
中微子是对的!
getParent().requestDisallowInterceptTouchEvent(true);
一旦 viewpager 访问 touchEvent 拦截,其中的子视图就可以获得事件。 在此处输入图像描述
我在 viewpager 中使用 FrameLayout 来获得 DrawerLayout 效果(我需要它与屏幕的高度不匹配,所以我不能使用抽屉布局或导航抽屉)。
这真的很有帮助!
我有一个类似的问题。
在我的情况下,我设置了一个OnTouchListener,ViewPager但是当接收到触摸的孩子设置时它没有接收到触摸事件onClick。
我所做的是扩展 ViewPager 类并在方法内调用我的点击侦听器onInterceptTouchEvent(boolean),它工作正常。请注意不要拦截错误的事件。