RecyclerView的item中嵌套R(shí)ecyclerView的滑動(dòng)沖突處理

場(chǎng)景再現(xiàn)

GIF.gif

布局分析

無標(biāo)題.png

外層是一個(gè)RecyclerView,每個(gè)Item中又有一個(gè)可以上下滑動(dòng)的RecyclerView,這種設(shè)計(jì)內(nèi)外層肯定會(huì)造成滑動(dòng)沖突,編碼完成的時(shí)候表現(xiàn)就是,內(nèi)部的 RecyclerView是無法滑動(dòng)的,就目前的問題嘗試著處理一下。

解決方法具體步驟如下:

  1. 步驟一:利用紅色Recycleview的addOnItemTouchListener 函數(shù)監(jiān)聽touchEvent獲取event坐標(biāo)點(diǎn),給ViewHolder判斷是否請(qǐng)求不攔截
紅色.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
            @Override
            public boolean onInterceptTouchEvent(RecyclerView rv,MotionEvent e) {
                //處理RecyclerView的item中嵌套R(shí)ecyclerView的滑動(dòng)沖突解決
                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.藍(lán)色),e.getRawX(),e.getRawY()));
                }
                return false;
            }

            @Override
            public void onTouchEvent(RecyclerView rv,MotionEvent e) {

            }

            @Override
            public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

            }
        });
  1. 步驟二:在工具類的Utils中的isTouchValue函數(shù),判斷event坐標(biāo)點(diǎn)是否在藍(lán)色Recycleview范圍內(nèi)
/**
     *
     * @param x event的rowX
     * @param y event的rowY
     * @return 這個(gè)點(diǎn)在不在內(nèi)部RecycleView范圍內(nèi).
     */
    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;
    }

這樣在滑動(dòng)位置處于內(nèi)部Recycleview上的時(shí)候,event就被傳到了內(nèi)部Recycleview中,觸發(fā)內(nèi)部Recycleview的滑動(dòng).不在內(nèi)部Recycleview上的時(shí)候不做處理

最終展示效果

GIF.gif
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容