2010-09-06 73 views
3

我想要侦听viewFlipper的触摸事件。我已经能够在我的活动中监听触摸事件,然后修改viewFlipper,但是无论用户在活动中,都会触发这些事件,并且我需要专门在viewFlipper上捕获触摸事件。我已经尝试添加setOnTouchListener,但它没有被调用。我假设viewFlippers儿童(网页浏览)正在'消费'触摸事件。setOnTouchListener未在ViewFlipper上调用

一个解决方案是将setOnTouchListener设置为每个Web浏览器,但这种感觉像是一种黑客攻击。有谁知道另一种方式?

感谢,

伊恩

很抱歉,如果这是一个双岗 - 但我以前的帖子似乎已经消失。

+0

ViewGroup.onInterceptTouchEvent(MotionEvent)怎么样? – BeRecursive 2010-09-06 11:25:21

+0

@ user440556:“我假设viewFlippers儿童(网页浏览)正在'消费'触摸事件。” - 正确。 – CommonsWare 2010-09-06 11:26:08

+0

因此,使用上述呼叫拦截触摸事件 – BeRecursive 2010-09-06 11:26:50

回答

4

使用ViewGroup.onInterceptTouchEvent(MotionEvent)

您应该Reference the Android Documentation,因为它的使用是相当复杂的。

使用的基本总结:

您这里收到触摸事件。如果你想消耗它,返回true,并将控制权传递给ViewFlipper的onTouchEvent()。返回假,它将继续传递给孩子。 onTouchEvent()也应返回true以确保所有其他事件都返回到ViewFlipper的方法。该小孩还将收到原始事件,并采取行动ACTION_CANCEL

+0

嗨,是的,感谢您的快速反应,但我确实有几个问题。 a)我没有扩展viewFlipper,所以我仍然可以使用它? b)这将允许我检测一个滑动手势,同时仍然允许子视图具有滚动功能[我目前可以通过活动dispatchTouchEvent实现此目的] – Yan 2010-09-06 14:58:30

+0

ViewFlipper实现ViewGroup接口,因此无论ViewFlipper可以使用哪些孩子onInterceptTouchEvent。只要你从这个函数返回false,每个下面的事件(直到并包括最后一个)都将在这里首先被传递,然后被传递到目标的onTouchEvent()。 – BeRecursive 2010-09-06 15:11:14

+0

再次感谢,但您的解释似乎不符合我的问题。显式地 - 我怎样才能访问onInterceptTouchEvent而不扩展viewFlipper(我不想这样做)? – Yan 2010-09-06 19:00:23

1

我遇到了同样的问题,并发现你的网页试图谷歌的答案。 经过几次非常令人沮丧的尝试,我终于找到了一个非常简单的解决方案,我仍然在听整个活动的触摸,就像你一样,但是在OnTouchEvent I过滤器上,如果ViewFlippers被触摸或不是:

@Override 
public boolean onTouchEvent(MotionEvent event) { 
     if(mFlip.isInTouchMode()){ 
      return gestureDetector.onTouchEvent(event); 
     } else{ 
      return super.onTouchEvent(event); 
     } 
} 

希望它有帮助!

4

最后它为我工作。默认情况下返回true以在此侦听器上获取多个调用。

viewFlipper.setOnTouchListener(new View.OnTouchListener() { 

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