使用 recyclerview 时,On Touch 侦听器对视图有不良行为
On Touch listener has a bad behavior for views while using recyclerview
我在一个 RelativeLayout 中有一个 Recyclerview 和一个自定义视图
like that image
我的自定义视图有 On Touch 侦听器,代码如下
override fun onTouch(view: View?, e: MotionEvent?): Boolean {
when (e!!.action) {
MotionEvent.ACTION_DOWN -> {
_isMouseCaptured = true
bubbleFR.visibility = VISIBLE
getTouchedItem(e.y)
return true
}
MotionEvent.ACTION_UP -> {
_isMouseCaptured = false
hideBubble()
}
MotionEvent.ACTION_MOVE -> {
_isMouseCaptured = true
getTouchedItem(e.y)
}
// MotionEvent.ACTION_CANCEL -> {
//
// }
}
// lineLL1.performClick()
return true
}
但是发生了如下意外行为:
- 当我开始在我的自定义视图上按下鼠标,然后移动鼠标(如拖动)时,我的自定义视图得到了 motionevent.canceled,然后鼠标移动未触发,鼠标向上也未触发我的自定义视图
- 当我开始将我的 recyclerview 滚动到较远的位置时,在其滚动操作期间,我可以触摸我的自定义视图,然后鼠标移动并在我的自定义视图上触发鼠标。
所以。只有当我在 recyclerview 滚动时启动它时,我才能为我的自定义视图(如拖动)按住并捕获鼠标移动,否则它不起作用。
就像其他一些视图窃取了我的自定义视图的焦点
我想触摸我的自定义视图并像滑动我的自定义视图一样在其上正常移动我的手指。
我使用拖放技术解决了我的问题。
我在一个 RelativeLayout 中有一个 Recyclerview 和一个自定义视图 like that image
我的自定义视图有 On Touch 侦听器,代码如下
override fun onTouch(view: View?, e: MotionEvent?): Boolean {
when (e!!.action) {
MotionEvent.ACTION_DOWN -> {
_isMouseCaptured = true
bubbleFR.visibility = VISIBLE
getTouchedItem(e.y)
return true
}
MotionEvent.ACTION_UP -> {
_isMouseCaptured = false
hideBubble()
}
MotionEvent.ACTION_MOVE -> {
_isMouseCaptured = true
getTouchedItem(e.y)
}
// MotionEvent.ACTION_CANCEL -> {
//
// }
}
// lineLL1.performClick()
return true
}
但是发生了如下意外行为:
- 当我开始在我的自定义视图上按下鼠标,然后移动鼠标(如拖动)时,我的自定义视图得到了 motionevent.canceled,然后鼠标移动未触发,鼠标向上也未触发我的自定义视图
- 当我开始将我的 recyclerview 滚动到较远的位置时,在其滚动操作期间,我可以触摸我的自定义视图,然后鼠标移动并在我的自定义视图上触发鼠标。
所以。只有当我在 recyclerview 滚动时启动它时,我才能为我的自定义视图(如拖动)按住并捕获鼠标移动,否则它不起作用。 就像其他一些视图窃取了我的自定义视图的焦点 我想触摸我的自定义视图并像滑动我的自定义视图一样在其上正常移动我的手指。
我使用拖放技术解决了我的问题。