问题描述
我发现了很多用于recyclerview物品上的滑动检测的示例。但是我尝试检测整个视图上的向右/向左滑动。
也有类似Android: How to handle right to left swipe gestures的示例 关于如何检测在布局容器之类的视图上滑动的信息。但是,将此触摸侦听器附加到recyclerview无效。
那么我如何在整个recyclerview上检测到向左/向右滑动?
编辑SmartSwipe库: 我尝试添加https://github.com/luckybilly/SmartSwipe库,因为滑动的效果看起来非常不错。
但是,如果我尝试将其包装到recyclerview中,则仅滑动效果就看不到任何数据:
SmartSwipe.wrap(binding.recyclerView).addConsumer(BezierBackConsumer())
.enableHorizontal()
.addListener(object : SimpleSwipeListener() {
override fun onSwipeOpened(wrapper: SmartSwipeWrapper,consumer: SwipeConsumer,direction: Int) {
}
})
将其附加到约束布局容器根本没有任何作用。
修改2: 将onTouchListener附加到视图对于recyclerview不起作用:
view.setOnTouchListener(object : OnHorizontalSwipeListener(requireContext()) {
override fun onRightSwipe() {
println("Swipe right")
}
override fun onLeftSwipe() {
println("Swipe left")
}
})
将其附加到Recyclerview会导致异常:
binding.recyclerView.setOnTouchListener.....
E/MessageQueue-JNI: java.lang.NullPointerException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkNotNullParameter,parameter e1
at ui.OnHorizontalSwipeListener$GestureListener.onFling(Unknown Source:2)
编辑3:,如果我向监听器类添加null检查,似乎可以正常工作:
override fun onFling(
e1: MotionEvent?,e2: MotionEvent?,velocityX: Float,velocityY: Float
): Boolean {
var result = false
try {
if (e1 != null && e2 != null) {
val diffY = e2.y - e1.y
val diffX = e2.x - e1.x
....
但是只有在滚动后才能开始工作。尝试在新的初始化片段上滑动不起作用。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)