ViewFlipper上的setOnTouchListener没有被调用

3
我想监听viewFlipper的触摸事件。我已经能够在我的活动中监听触摸事件,然后修改viewFlipper,但是这些事件在用户在活动中的任何位置都会触发,我需要特别捕获viewFlipper上的触摸事件。我尝试添加setOnTouchListener,但没有被调用。我假设viewFlipper的子元素(webviews)正在“消耗”触摸事件。
一种解决方案是为每个webview设置setOnTouchListener,但这感觉像一个hack。有人知道另一种方法吗?
谢谢,
Ian
如果这是一个重复的帖子-请原谅,因为我的先前的帖子似乎已经消失了。

ViewGroup.onInterceptTouchEvent(MotionEvent)怎么样? - BeRecursive
@user440556:"我假设viewFlippers的子元素(webviews)正在“消耗”触摸事件。"-- 正确的。 - CommonsWare
因此,使用上述调用拦截触摸事件。 - BeRecursive
3个回答

4
最终它对我起作用了。默认返回true以在此侦听器上获得多次调用。
viewFlipper.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (this.gestureDetector.onTouchEvent(event)) {
                return false;
            }
            return true;
        }
  });

4

使用 ViewGroup.onInterceptTouchEvent(MotionEvent)

你应该参考 Android 文档,因为它的使用相当复杂。

基本用法概述:

在这里接收触摸事件。如果你想消耗它,请返回 true,并控制将传递给 ViewFlipper 的 onTouchEvent()。返回 false,则它将继续传递给子元素。onTouchEvent() 也应该返回 true,以确保所有后续事件都返回到 ViewFlipper 的方法中。子元素还将接收带有动作 ACTION_CANCEL 的原始事件。


嗨Be,感谢您的快速回复,但我还有几个问题。 a)我没有扩展viewFlipper,所以我仍然可以使用它吗? b)这是否允许我在保持子视图具有滚动功能的同时检测滑动手势[我目前可以通过活动dispatchTouchEvent实现此目的]? - Ian
ViewFlipper实现了ViewGroup接口,因此无论子项是什么,ViewFlipper都可以使用onInterceptTouchEvent。只要从此函数返回false,每个后续事件(直到最后一个up事件)将首先传递到此处,然后再传递到目标的onTouchEvent()。 - BeRecursive
再次感谢您的解释,但它似乎不符合我的问题。明确地说,我如何在不扩展viewFlipper(我不想这样做)的情况下访问onInterceptTouchEvent? - Ian
简而言之,你不能这样做。由于onInterceptTouchEvent是通过继承提供给ViewFlipper的,因此您必须覆盖它。 - BeRecursive
由于我不想扩展viewFlipper,所以我已经将setOnTouchListener添加到所有子视图中。只要我返回false,就可以得到正确的行为。 - Ian
onTouchEvent() 应该返回 true,以确保所有后续事件都返回到 ViewFlipper 的方法中。它真的帮了我。+1 - Jomoos

1
我遇到了同样的问题,在谷歌上搜索答案时找到了你的页面。 经过几次非常令人沮丧的尝试,我最终找到了一个相当简单的解决方案。我仍然在整个活动中监听触摸事件,就像你一样,但是在 OnTouchEvent 中,我会过滤 ViewFlipper 是否被触摸:
@Override
public boolean onTouchEvent(MotionEvent event) {
        if(mFlip.isInTouchMode()){
            return gestureDetector.onTouchEvent(event);
        } else{
            return super.onTouchEvent(event);
        }   
}

希望能有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接