1

我正在开发的应用程序,它包含几个片段就像下面的图片:的Android的onTouchEvent和onclick事件

Picture 1

底部视图是MainActivity,并且有几个片段以上MainActivity,其可以包含纽扣。我想在顶部添加一个片段以便聆听OnTouchEvents(手势),但忽略onclick事件并将onclick事件传递到下面的片段。

这里是我的问题,

  1. 我如何能够区分onTouchEventonclick事件在我的代码?
  2. 如何将onclick事件传递给下面的片段?
    我看到一些人建议使用onInterceptTouchEvent(),但我不确定这是否适用于我的情况,我不知道如何使用onInterceptTouchEvent()

更新:
我试图重写boolean dispatchTouchEvent(MotionEvent ev)使顶部片段忽略点击事件,但是由于第一触摸事件必须是MotionEvent.ACTION_DOWN,似乎没有办法,我确定触摸事件是否是点击。

那么,有没有其他方法可以做到这一点?

回答

0

Documentation

的onInterceptTouchEvent()方法每当的ViewGroup的表面上检测到触摸事件,包括其子的表面上被调用。 如果onInterceptTouchEvent()返回true,则会截取MotionEvent,这意味着它不会被传递给子代,而是传递给父代的onTouchEvent()方法。

onInterceptTouchEvent()方法让父母有机会在孩子做任何事情之前看到任何触摸事件。如果您从onInterceptTouchEvent()返回true,则以前处理触摸事件的子视图将接收ACTION_CANCEL,并将来自该点的事件发送到父级的onTouchEvent()方法以进行常规处理。 onInterceptTouchEvent()还可以返回false并简单地监视事件,因为它们沿着视图层次往下传递到它们通常的目标,这些目标将使用自己的onTouchEvent()处理事件。

因此,您必须根据您的应用程序流程逻辑返回true/false(在onInterceptTouchEvent方法中)。如果您使用OnTouchListener,则可以避免使用OnClickListener。请参阅文档中的示例以更好地理解它。

0

This会告诉你onTouch和onClick的不同之处。 您可以使用自定义接口将数据传递到较低片段进行操作