RecyclerView的item中嵌套RecyclerView的滑动辩说处置惩罚

程序员 2024-9-2 13:58:48 90 0 来自 中国
场景再现
布局分析
外层是一个RecyclerView,每个Item中又有一个可以上下滑动的RecyclerView,这种计划表里层肯定会造成滑动辩说,编码完成的时间表现就是,内部的 RecyclerView是无法滑动的,就现在的题目实验着处置惩罚一下。
办理方法具体步骤如下:

  • 步骤一:使用赤色Recycleview的addOnItemTouchListener 函数监听touchEvent获取event坐标点,给ViewHolder判定是否哀求不拦截
赤色.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {            @Override            public boolean onInterceptTouchEvent(RecyclerView rv,MotionEvent e) {                //处置惩罚RecyclerView的item中嵌套RecyclerView的滑动辩说办理                View childViewUnder = 赤色.findChildViewUnder(e.getX(), e.getY());                if (rv != null && childViewUnder != null){                    BaseViewHolder baseViewHolder = (BaseViewHolder)rv.getChildViewHolder(childViewUnder);                    赤色.requestDisallowInterceptTouchEvent(Utils.isTouchValue(baseViewHolder.getView(R.id.蓝色),e.getRawX(),e.getRawY()));                }                return false;            }            @Override            public void onTouchEvent(RecyclerView rv,MotionEvent e) {            }            @Override            public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {            }        });

  • 步骤二:在工具类的Utils中的isTouchValue函数,判定event坐标点是否在蓝色Recycleview范围内
/**     *     * @param x event的rowX     * @param y event的rowY     * @return 这个点在不在内部RecycleView范围内.     */    public static boolean isTouchValue(RecyclerView recyclerView,float x, float y) {        int[] wh= new int[2];        //触摸在屏幕上的位置        recyclerView.getLocationOnScreen(pos);        int width = recyclerView.getMeasuredWidth();        int height = recyclerView.getMeasuredHeight();        return x >= wh[0] && x <= wh[0] + width && y >= wh[1] && y <= wh[1] + height;    }如许在滑动位置处于内部Recycleview上的时间,event就被传到了内部Recycleview中,触发内部Recycleview的滑动.不在内部Recycleview上的时间不做处置惩罚
终极展示结果
3.gif
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-24 10:08, Processed in 0.161066 second(s), 36 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表