根据触摸事件更改视图

Change views based on touch events

假设我有一个包含一些项目的列表 (RecyclerView),当用户将手指放在其中一个项目上时,我需要显示一个完全不同的屏幕,并且基于用户将手指从不同的屏幕上移开,我的应用程序会执行一些不同的操作。

我已经通过 Fragment 交易取得了一些成就(当我收到一个 ACTION_DOWN MotionEvent 在列表的一项 Views 中),但问题是第二个 Fragment 无法接收 ACTION_UP 或任何其他 MotionEvent因为 ACTION_DOWN 从未被派遣过,我需要一种方法来知道用户何时将手指移开。

有什么方法可以实现我想要的行为(也许使用一些不同于替换 Fragments 的技术)?

当您在视图的 onTouchEvent 中 return 为 true 时,它​​将完全控制其余手势,直到并包括 ACTION_UP MotionEvent。

如果您从原始侦听器获取 ACTION_UP 的坐标,然后将它们发送到您想要处理该信息的任何地方,它将执行您想要的操作。

另一种技术是在 ViewGroup 中覆盖 onInterceptTouchEvent()。这将使您能够在视图项收到 ACTION_DOWN MotionEvent 后立即拦截事件。然后,包括 ACTION_UP 在内的其余手势将被重定向到视图组 onTouchEvent().