Java 除非先选择“视图”,否则RequestDisallowWinterCeptTouchEvent不起作用

Java 除非先选择“视图”,否则RequestDisallowWinterCeptTouchEvent不起作用,java,android,ontouchlistener,Java,Android,Ontouchlistener,根据android文档,您可以让您的家长查看组,并在其上调用RequestDisallowWinterCeptTouchEvent(true),以阻止其他事情的干扰。这不仅会导致直接父对象,还会导致可能拦截触摸的任何其他父对象在特定事件期间忽略触摸 这听起来很棒,在较新的设备(我的是android 4.1)上似乎可以正常工作,但在较旧的设备(如2.3.3)上,除非我先单击我的滚动视图,然后滚动它,否则它无法工作,否则其他父级滚动视图可能仍然会干扰 我正在视图.OnTouchListener中发送

根据android文档,您可以让您的家长
查看组
,并在其上调用
RequestDisallowWinterCeptTouchEvent(true)
,以阻止其他事情的干扰。这不仅会导致直接父对象,还会导致可能拦截触摸的任何其他父对象在特定事件期间忽略触摸

这听起来很棒,在较新的设备(我的是android 4.1)上似乎可以正常工作,但在较旧的设备(如2.3.3)上,除非我先单击我的滚动视图,然后滚动它,否则它无法工作,否则其他父级滚动视图可能仍然会干扰

我正在
视图.OnTouchListener
中发送可滚动子级的请求


你知道如何在不依赖于编写自定义子类来检查运动事件的命中率等的情况下自动执行此操作吗?

我在2.3中也遇到了一些问题,在2.3中,禁用将间歇性地执行

我过去常常调用view.requestDisallowerWinterCeptTouchEvent(true),而不考虑事件.getAction()

然后我尝试做一个好公民,并将onTouch()方法中的代码更改为:

switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            v.requestDisallowInterceptTouchEvent(true);
            break;
        case MotionEvent.ACTION_CANCEL:
        case MotionEvent.ACTION_UP:
            v.requestDisallowInterceptTouchEvent(false);
            break;
        default:
            break;
        }
请记住,此方法(或引用视图下的某些其他视图)必须返回true,以便父视图遵守不允许请求

不确定这是否能解决您的问题,但值得一试。

您可以尝试以下方法:

m_parentScrollView.setOnTouchListener(new View.OnTouchListener() 
{
       public boolean onTouch(View p_v, MotionEvent p_event) 
        {
               m_childScrollView.getParent().requestDisallowInterceptTouchEvent(false);
           //  We will have to follow above for all scrollable contents
           return false;
        }
});

                                        **OR**

m_childScrollView.setOnTouchListener(new View.OnTouchListener() 
{
      public boolean onTouch(View p_v, MotionEvent p_event)
       {
          // this will disallow the touch request for parent scroll on touch of child view
           p_v.getParent().requestDisallowInterceptTouchEvent(true);
           return false;
       }
});

我还没试过。。。不幸的是,情况没有改变。我的意思是,我通过使用自定义子类检查父类中的事件来实现它,但是如果不需要这样做,它将更加灵活和可扩展。如果我想支持旧版本,可能会有一些麻烦。确认这是使用
onTouchEvent
的正确方法,将RequestDisallowWinterCeptTouchEvent在操作时更改为true,在操作时更改为false或操作时更改为CANCEL。