【问题标题】:Recyclerview with Swipe left/right row带有向左/向右滑动行的 Recyclerview
【发布时间】:2016-02-12 06:42:38
【问题描述】:

我有带有 tablayout 的 viewpager,在 ViewPager 里面我有一个正在创建 RecyclerView 的 Fragment,

在 RecyclerVIew roe 项目中,我创建了一个 Horizo​​ntal ScrollView,用于向左/向右滑动,

基本上我只想将行向左滑动屏幕的 75%,然后显示可滑动视图,

我也使用了ItemTouchHelperRecyclerView,但它刷了整行(100% 刷了行),

我知道谷歌上有一些库可用于创建左右滑动手势,

但是所有这些都不能正常工作,因为当我们在 recyclerview 项目上滑动时,有时会触摸到 ViewPager 因此页面被滑动我不希望这样,

所以我使用Horizo​​ntalScrollView,但问题是我无法检测Horizo​​ntalScrollView的触摸监听器内的滑动方向,

实际上,如果在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 事件,因此不能不派生滑动方向

【问题讨论】:

    标签: android android-recyclerview


    【解决方案1】:

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

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

    【讨论】:

    • 我得到了所有滚动事件转义 Action.DOWN,但有时 Action.DOWN 也来了
    • 试试 ACTION.SCROLL 看看你能不能抓住它。
    • 基本上我需要 X1 和 X2 所以我可以决定滚动方向
    • 试试这个库。它非常容易实现,可以直接与recycler view一起使用。 github.com/daimajia/AndroidSwipeLayout
    猜你喜欢
    • 2013-02-17
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多