我有一个ViewPager,可以包含两种类型的视图。其中一种视图类型有按钮,其中一种视图类型没有。无按钮视图类型必须捕获onTouchEvent中的触摸以平移和缩放图像。但我想让点击气泡到ViewPager(附有一个clickListener)
我必须在视图的onTouchEvent ACTION_DOWN中返回true,否则它将看不到未来的事件。
我不能在ViewPager中使用onInterceptTouchEvent()来捕获点击次数,因为其中一个视图确实有按钮而这些按钮需要点击
那么我的视图如何陷入滑动,让点击冒泡?
答案 0 :(得分:1)
正确的方法可能是只拦截你想拦截的事件,只在需要时在onInterceptTouchEvent中返回true。
但是如果你想要与黑暗的一面,那就是一个肮脏的选择,这可能会引诱你,你可能会后悔:拦截所有事件,然后如果需要将它们传下来。
e.g。在你的观点内有类似
的内容 public boolean canInterceptTouch(MotionEvent ev) {
// return true if you are interested in this touch event, e.g. it falls into
// a clickable area
}
以及处理触摸事件的内容,例如
public void interceptTouch(MotionEvent ev) {
// here you react to the event
}
你的viewpager中有
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return true;
}
视图寻呼机将以脏的方式处理事件:
@Override
public boolean onTouchEvent(MotionEvent ev) {
if (yourView.canInterceptTouch(ev))) {
yourView.interceptTouch(ev);
return true;
} else {
return doSomethingElse();
}
}
注意:虽然我已经做了类似的事情,结果不错,但我不建议将其作为解决方案,除非你在处理动作事件时使用非常简单的逻辑,否则它会变得一团糟。如果你现在花一些时间正确地完成它,你未来的自我会更快乐。
编辑:代码尚未经过测试,只是为了让您了解自己需要什么。对不起任何错字。
答案 1 :(得分:0)
尝试使用此ViewGroup.onInterceptTouchEvent(MotionEvent)
。这允许ViewGroup在将事件分派给子视图时观察事件。