//效果图片 //xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/white" android:gravity="center" android:orientation="vertical"> <android.support.v7.widget.RecyclerView android:id="@+id/rv_horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> </android.support.v7.widget.RecyclerView> <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginBottom="@dimen/dp_10" android:layout_marginTop="@dimen/dp_5"> <View android:layout_width="@dimen/dp_33" android:layout_height="@dimen/dp_2" android:background="#2631a81e" /> <View android:id="@+id/main_line" android:layout_width="@dimen/dp_13" android:layout_height="@dimen/dp_2" android:background="#31A81E" /> </FrameLayout> </LinearLayout> </LinearLayout> //代码 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); }
仿淘宝 RecycleView滑动效果 底部view联动
最新推荐文章于 2022-08-15 17:10:46 发布