Android在整个recyclerview上向右/向左滑动

问题描述

我发现了很多用于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 (将#修改为@)