Android ListView - 在水平移动事件中冻结垂直位置

Android ListView - freeze vertical position on horizontal move event

我遇到了这个奇怪的问题。 我有一个音量控制应用程序。 在我的 ListView 中,我有一些自定义元素,可用于更改特定应用程序的音量。在这个自定义元素中,我有一个 MotionEvents 侦听器,它主要监视 motionEvent.getX() 坐标以计算音量变化。

例如,这是我现在的观点:AppListView
只需触摸一个元素并水平移动手指,彩色线条和数字就会动态变化。

我的问题是当我尝试改变音量并且我也做了一些垂直移动时,应用程序上的事件将被取消,因为发生了滚动事件。

我尝试了很多方法来禁用 ListView 的滚动,但大多数方法只是简单地禁用了所有触摸事件。

如何检测水平移动并在 MotionEvent.ACTION_UP 操作之前禁用滚动?

你能给我推荐一个没有 ListView 的解决方案吗?

(ListView 在 SwipeDownRefreshLayout 中。)

谢谢!

好的,我找到了解决办法。 在我的自定义适配器中,我有一个 onTouchListener,在 onTouch 我刚刚添加了这一行: view.getParent().requestDisallowInterceptTouchEvent(true); trueACTION_DOWNfalseACTION_UP