【发布时间】:2020-12-28 06:48:56
【问题描述】:
我有一个水平的 recyclerView,我用 imageViews 填充,这样当用户从右向左滑动时,其余的图像就会一张一张地出现。一切正常,图像已加载,水平滚动按预期工作,甚至个别项目的 clickListener 工作正常......
但是...如果向右滚动的触摸手势不是纯水平滑动(或者如果用户到达 recyclerView 的末尾并想要向左滚动返回),正在加载 recyclerView 的片段也向下滚动。我想避免这种行为,这样当用户打算到达从右向左滑动的图像时,recyclerView 只会在水平方向移动,而忽略在 recyclerView 上执行的任何垂直移动。如果用户在 recyclerView 屏幕区域之外点击或滑动,我希望发生通常的行为(按预期向下滚动)。我已尝试使用此站点中的其他替代方法,例如使用 setOnTouchListener 选项来检测 MotionEvent 并采取相应措施,您可以在下面查看(这是我的片段中的实际代码):
advertPicturesRecyclerView.setOnTouchListener { recyclerView, motionEvent ->
when(motionEvent.action) {
MotionEvent.ACTION_UP -> {
Snackbar.make(recyclerView, "Touch down!", Snackbar.LENGTH_LONG).show()
recyclerView.parent.requestDisallowInterceptTouchEvent(true)
true
}
else -> {
recyclerView.parent.requestDisallowInterceptTouchEvent(false)
true
}
}
}
在这种情况下,ACTION_UP 表示在 recyclerView 的方向上,所以这只是检测 recyclerView 内部的移动,并将垂直移动“传递”到向下滚动的父级(片段)。
如何“阻止”recyclerView 以忽略任何垂直滑动,而只水平移动?
【问题讨论】:
标签: android android-studio kotlin android-fragments android-recyclerview