仿淘宝 RecycleView滑动效果 底部view联动

//效果图片


//xml



    

        
        

        

            

            
        
    


//代码
 if (!CollectionUtil.isEmpty(logos)) {
            final float[] endX = {0};
            View fixBannerRoot = mInflater.inflate(R.layout.module_home_logo, null);
            RecyclerView mRvHx = fixBannerRoot.findViewById(R.id.rv_horizontal);
            View mLine = fixBannerRoot.findViewById(R.id.main_line);
            GuideAdapter adapter = new GuideAdapter(getActivity(), R.layout.item_demo_guid, logos);
            mRvHx.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayout.HORIZONTAL, false));
            mRvHx.setAdapter(adapter);
            //这里的mRvHx是需要绑定滚动条的RecyclerView
            mRvHx.addOnScrollListener(new RecyclerView.OnScrollListener() {
                @Override
                public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                    super.onScrollStateChanged(recyclerView, newState);
                }

                @Override
                public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                    super.onScrolled(recyclerView, dx, dy);

                    //整体的总宽度,注意是整体,包括在显示区域之外的。
                    int range = mRvHx.computeHorizontalScrollRange();
                    float density = DisplayUtil.getDensity(activity);
                    //计算出溢出部分的宽度,即屏幕外剩下的宽度
//                    float maxEndX = range + (10 * density) + 5 - DisplayUtil.getScreenWidth(activity);
                    float maxEndX = range - DisplayUtil.getScreenWidth(activity);
                    mLine.setVisibility(maxEndX <= 0 ? View.GONE : View.VISIBLE);
                    //滑动的距离
                    endX[0] += dx;
                    //计算比例
                    float proportion = endX[0] / maxEndX;

                    //计算滚动条宽度
                    int transMaxRange = ((ViewGroup) mLine.getParent()).getWidth() - mLine.getWidth();
                    //设置滚动条移动
                    mLine.setTranslationX(transMaxRange * proportion);
                }

            });
            llContainer.addView(fixBannerRoot);
        }

你可能感兴趣的:(Android,Java)