RecyclerView与左/右滑行的实现

3
我有一个带TabLayout的ViewPager,在ViewPager中有一个Fragment,其中创建了一个RecyclerView。
在RecyclerView的行项目中,我创建了一个水平滚动视图,以获取左右滑动的动作。
基本上,我想只将行向左滑动75%,然后显示可滑动视图。
我也使用了RecyclerView的ItemTouchHelper,但它会完全滑动行(100%滑动行)。
我知道谷歌上有可用于创建向左和向右滑动手势的库。
但是所有这些都不起作用,因为当我们在recyclerview项目上滑动时,有时触摸会到达ViewPager,因此页面会被滑动,我不想要那样。
所以我使用了HorizontalScrollView,但问题是我无法在HorizontalScrollView的触摸监听器中检测滑动方向。
实际上,我们想在HorizontalScrollView上滚动一定量后自动滚动。
以下是我尝试过的代码。
holder.scrollContainer.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {

                int scroll1st = 0;
                int scroll2nd = 0;

                if(event.getAction() == MotionEvent.ACTION_DOWN){
                    scroll1st = holder.scrollContainer.getScrollX();
                    Log.d("SCROLL", "Scroll down callded: amt is: " + holder.scrollContainer.getScrollX() );
                    mDataSet.get(position).isFirstSwipe = false;
                } else if (event.getAction() == MotionEvent.ACTION_UP){
                    scroll2nd = holder.scrollContainer.getScrollX();
                    Log.d("SCROLL", "Scroll up callded: amt is: " + holder.scrollContainer.getScrollX() );
                }

                Log.d("SCROLL", "max scroll amount: " + holder.scrollContainer.getMaxScrollAmount());

                if(event.getAction() == MotionEvent.ACTION_UP){

                    if(scroll2nd > scroll1st && (scroll2nd - scroll1st ) > 50 ){
                        holder.scrollContainer.postDelayed(new Runnable() {
                            public void run() {
                                holder.scrollContainer.fullScroll(HorizontalScrollView.FOCUS_RIGHT);
                            }
                        }, 100L);
                        mDataSet.get(position).isFirstSwipe = true;
                    } else if (scroll1st > scroll2nd && (scroll1st - scroll2nd ) > 50){
                        holder.scrollContainer.postDelayed(new Runnable() {
                            public void run() {
                                holder.scrollContainer.fullScroll(HorizontalScrollView.FOCUS_LEFT);
                            }
                        }, 100L);
                        mDataSet.get(position).isFirstSwipe = true;
                    }
    }
                v.onTouchEvent(event);
                return true;
            }
        });

基本上,ACTION.DOWN事件并不总是被触发,因此无法推导出滑动方向。
1个回答

0

确保 RecyclerView 将事件传递给滚动容器。

onTouchListener 添加到 RecyclerView 并将事件传递给您的 ScrollView


我正在获取所有滚动事件的逃逸Action.DOWN,但有时也会出现Action.DOWN。 - Lavekush Agrawal
尝试使用ACTION.SCROLL并查看是否能够捕获它。 - Ragesh Ramesh
基本上我需要X1和X2,这样我才能决定滚动方向。 - Lavekush Agrawal
试试这个库。它非常容易实现,并且可以直接与RecyclerView一起使用。https://github.com/daimajia/AndroidSwipeLayout - Ragesh Ramesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接