【问题标题】:Dispatch touch event to a sibling view将触摸事件发送到同级视图
【发布时间】:2017-04-27 15:42:54
【问题描述】:

我开发了一个扩展 ViewGroup 的自定义布局。现在,我想在活动中使用它。在我的活动中,我在 framelayout 中有这个布局和一个 viewpager。我的自定义布局填充了我的 Frame 布局并位于我的 viewPager 上方。

我希望能够处理我的自定义布局上的点击事件,并让所有其他动作转到 viewpager,以便它仍然可以滚动。

到目前为止,我还没有成功。要么我有点击,但 viewpager 不能再滚动,或者相反。我已经覆盖了 onTouchEvent 和 onInterceptTouchEvent。

我注意到的是,我在我的自定义布局上正确接收到 down 事件,但是一旦它被 viewpager 捕捉到,我就再也爬不起来了。如何在同级视图之间为触摸事件进行通信?

PS : 我试过 splitMotionEvent 无济于事

【问题讨论】:

    标签: android touch


    【解决方案1】:

    确保您的自定义布局的onTouchEventdispatchTouchEventACTION_DOWN 发生时返回true,然后您的自定义布局将在稍后收到ACTION_MOVEACTION_UP

    【讨论】:

      【解决方案2】:

      我在使用 OnTouchClickListener 跟踪点击和滑动时遇到了同样的问题。

      我通过将触摸分派给父级和视图本身以忽略即将发生的事件来解决它(以便调用其兄弟的触摸/单击)。如果事件不被忽略,就消费它。

      代码如下所示:

      touchTrackingView.setOnTouchListener(new View.OnTouchListener() {
          @Override
          public boolean onTouch(View v, MotionEvent event) {
              // do not consume this event so the sibling gets the touch/click
              if (mIgnoreNextTouchEvent) {
                  mIgnoreNextTouchEvent = false;
                  return false;
              }
              // TODO do what you need to do with the touch
      
              // next touch should be ignored so that
              // the sibling gets their touch/click invoked  
              mIgnoreNextTouchEvent = true;
              ((View) v.getParent()).dispatchTouchEvent(event);
              return true;
          }
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-27
        • 1970-01-01
        • 2013-08-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多