如何在onTouchEvent中允许点击冒泡

时间:2014-09-19 15:23:48

标签: android ontouchevent

我有一个ViewPager,可以包含两种类型的视图。其中一种视图类型有按钮,其中一种视图类型没有。无按钮视图类型必须捕获onTouchEvent中的触摸以平移和缩放图像。但我想让点击气泡到ViewPager(附有一个clickListener)

我必须在视图的onTouchEvent ACTION_DOWN中返回true,否则它将看不到未来的事件。

我不能在ViewPager中使用onInterceptTouchEvent()来捕获点击次数,因为其中一个视图确实有按钮而这些按钮需要点击

那么我的视图如何陷入滑动,让点击冒泡?

2 个答案:

答案 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在将事件分派给子视图时观察事件。