重新启用滚动功能后,带有自定义查看器的recyclerview停止向左滚动。
基于业务逻辑,我禁用了滚动,但是当用户滑动到可配置的距离时,我启用了滚动(x上为100px)。如果用户执行LTR,滚动很好,但是如果完成RTL,则什么也不会发生。
recyclerview具有三个视图。 V1,V2和V3,但为了使recyclerview成为轮播,我在第一个索引处添加V3,在最后一个索引处添加V1,类似这样的V3, V1, V2, V3, V1
。这样,当用户到达最后一个可见视图(V3)时,进一步滑动即可显示第一个视图(V1)
list = listOf(scrollableData.last()) + scrollableData + listOf(
scrollableData.first()
)
以上逻辑在V1和V2上正常工作,但在V3上却不能正常工作,我认为这会导致向左滚动禁用。我可能错了。除了上面指定的内容以外,我正在做其他事情。
家庭活动
gestureDetector = GestureDetector(this@HomeActivity, object : CustomGestureDetector(recycler_view) {
override fun move(): Boolean {
enableScroll()
return false
}
override fun down(): Boolean {
disableScroll()
return false
}
})
recycler_view.setOnTouchListener { v, event ->
if (event != null) {
gestureDetector.onTouchEvent(event)
}
false
}
override fun enableScroll() {
linearLayoutManager.isScrollEnabled = true
}
override fun disableScroll() {
linearLayoutManager.isScrollEnabled = false
}
CustomGestureDetector
public abstract class CustomGestureDetector(view: View) : GestureDetector.SimpleOnGestureListener() {
var view = view
override fun onDown(e: MotionEvent?): Boolean {
view.onTouchEvent(e)
down()
return false
}
override fun onFling(e1: MotionEvent, e2: MotionEvent, velocityX: Float, velocityY: Float): Boolean {
if (Math.abs(e2.x - e1.x) > 500) {
move()
}
return false
}
abstract fun move(): Boolean
abstract fun down(): Boolean
}
希望我能提供足够的信息来理解我所面临的问题。
答案 0 :(得分:0)
代替在recyclerview
上实现逻辑。我创建了一个自定义RelativeLayout
并在其中实现了逻辑,并将此布局用于每个项目。
class CustomRelativeLayot: RelativeLayout{
...
override fun onTouchEvent(motionEvent: MotionEvent): Boolean {
when (motionEvent.action) {
MotionEvent.ACTION_DOWN -> {
pressedX = motionEvent.x
disableScreenScroll()
pressedTime = System.currentTimeMillis()
}
}
MotionEvent.ACTION_MOVE -> {
if (Math.abs(motionEvent.x - pressedX) > scrollSensitivity && isSwipable) {
...
}
}
MotionEvent.ACTION_UP -> {}
}
return true
}
item.xml
<com...CustomRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/airModuleLayout"
android:layout_width="match_parent"
android:layout_height="@dimen/temp_height"
android:orientation="vertical"
app:isSwipable="true">
..
</com...CustomRelativeLayout>
我希望这可以帮助面临相同问题的其他人。