在自定义视图中调用 onTouchEvent() 时防止 RecycleView 滚动
Posted
技术标签:
【中文标题】在自定义视图中调用 onTouchEvent() 时防止 RecycleView 滚动【英文标题】:Prevent RecycleView from scrolling when onTouchEvent() is called in custom view 【发布时间】:2022-01-14 05:24:50 【问题描述】:当onTouchEvent(e: MotionEvent)
在作为回收视图项的一部分的自定义视图中调用时,如何防止 RecycleView 滚动?
【问题讨论】:
【参考方案1】:很遗憾,没有快速的解决方案。
在您的自定义视图中注册触摸监听器。
customView.setOnTouchListener v, event ->
when (event.action)
MotionEvent.ACTION_DOWN ->
callback?.onStartTrackingTouch()
MotionEvent.ACTION_UP ->
callback?.onStopTrackingTouch()
else ->
super.onTouchEvent(event)
在适配器中注册回调:
callback = object : CustomView.Callback
override fun onStartTrackingTouch()
enableRecycleViewScroll(false)
override fun onStopTrackingTouch()
enableRecycleViewScroll(true)
在适配器内部创建函数(可以在onAttachedToRecyclerView()
函数中引用RecycleView
):
private fun enableRecycleViewScroll(enable: Boolean)
recyclerView?.apply
val layoutManager = layoutManager as CustomLayoutManager
layoutManager.enableScroll = enable
并创建自定义布局管理器:
open class CustomLayoutManager(
context: Context?, spanCount: Int, orientation: Int, reverseLayout: Boolean
) : LinearLayoutManager(context, spanCount, orientation, reverseLayout)
var enableScroll = true
override fun canScrollVertically(): Boolean
return enableScroll
【讨论】:
以上是关于在自定义视图中调用 onTouchEvent() 时防止 RecycleView 滚动的主要内容,如果未能解决你的问题,请参考以下文章
Swift:在自定义视图中未调用 UIButton 触摸事件
需要在自定义 UITextField 中调用 shouldChangeCharactersInRange 并调用视图控制器函数通知更新
在自定义视图中调用 super() 时,确保传递与组件的构造函数相同的 props