在ViewFlipper上未调用setOnTouchListener

时间:2010-09-06 10:50:23

标签: android android-widget

我想听一下viewFlipper的触摸事件。我已经能够在我的活动中听取触摸事件,然后修改viewFlipper,但是当用户在活动中的任何地方都会触发这些事件,我需要专门在viewFlipper上捕获触摸事件。我尝试添加setOnTouchListener但它没有被调用。我假设viewFlippers孩子(网页浏览)正在“消费”触摸事件。

一个解决方案是将setOnTouchListener添加到每个webview中,但这感觉就像一个黑客。有谁知道另一种方式?

谢谢,

伊恩

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

3 个答案:

答案 0 :(得分:4)

使用ViewGroup.onInterceptTouchEvent(MotionEvent)

你应Reference the Android Documentation,因为它的使用非常复杂。

基本使用概要:

您在此处收到触摸事件。如果要使用它,则返回true并将控件传递给ViewFlipper的onTouchEvent()。返回false,它将继续传递给孩子。 onTouchEvent()也应返回true以确保将所有其他事件返回到ViewFlipper的方法。孩子还将收到行动ACTION_CANCEL的原始活动。

答案 1 :(得分:4)

最后它对我有用。默认情况下返回true以在此侦听器上获得多个调用。

viewFlipper.setOnTouchListener(new View.OnTouchListener() {

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

答案 2 :(得分:1)

我遇到了同样的问题,发现您的网页试图谷歌寻求答案。 经过一些非常令人沮丧的尝试之后,我最终找到了一个非常简单的解决方案,我仍然像你一样听取整个活动的触摸,但是如果触摸了ViewFlippers,我会在OnTouchEvent上过滤:

@Override
public boolean onTouchEvent(MotionEvent event) {
        if(mFlip.isInTouchMode()){
            return gestureDetector.onTouchEvent(event);
        } else{
            return super.onTouchEvent(event);
        }   
}
希望它有所帮助!