Android(安卓)淘宝滑动条,淘宝菜单滑动条;
16lz
2021-01-25
淘宝菜单滑动条,图如下;
实现一下这个效果 , 上面是列表,可以用RecyclerView实现 , 下面跟随菜单滑动的条可以用View做位移动画实现;
实现滑动条跟随菜单做位移动画;
rv.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); int range = recyclerView.computeHorizontalScrollRange(); //全长度 int extent = recyclerView.computeHorizontalScrollExtent(); // 当前显示的长度 int offset = recyclerView.computeHorizontalScrollOffset(); //已滑动的偏移量 //屏幕外的长度 float wai = range - extent ; // 已滑动长度的比例 float huabi = (float) (offset * 1.0) / wai; //注意!!!,如果用Int型,会取整; int huafan = layoutProgress.getWidth() - vProgress.getWidth(); //可滑动范围 float translationX = huabi * huafan; // view偏移量 vProgress.setTranslationX(translationX); } });
下面是全部代码:
public class TaoIndicatorActivity extends AppCompatActivity { private RecyclerView rv; private View vProgress; private RelativeLayout layoutProgress; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_tao_indicator); rv = findViewById(R.id.rv); layoutProgress = findViewById(R.id.layout); vProgress = findViewById(R.id.v); rv.setLayoutManager(new LinearLayoutManager(this , LinearLayoutManager.HORIZONTAL , false)); initView(); } private void initView() { rv.setAdapter(new TaoAdapter()); rv.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); } @Override public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); int range = recyclerView.computeHorizontalScrollRange(); //全长度 int extent = recyclerView.computeHorizontalScrollExtent(); // 当前显示的长度 int offset = recyclerView.computeHorizontalScrollOffset(); //已滑动的偏移量 L.c("全长度:"+range +"\n当前显示的长度:"+extent +"\n已滑动的偏移量:"+offset); //屏幕外的长度 float wai = range - extent ; // 已滑动长度的比例 float huabi = (float) (offset * 1.0) / wai; //注意!!!,如果用Int型,会取整; int huafan = layoutProgress.getWidth() - vProgress.getWidth(); //可滑动范围 float translationX = huabi * huafan; // view偏移量 vProgress.setTranslationX(translationX); L.c("\n屏幕外的长度:"+wai +"\n滑动比例:"+huabi +"\n可滑动范围:"+huafan +"\nview偏移:"+translationX); } }); }}
如果需要设置一屏显示几个Item ,计算并设置一下Item宽度就行了 ,Item宽度 =((屏幕宽度 - 边距) / Item数量)
更多相关文章
- android 中的PopupWindow 弹出菜单
- Android仿Iphone屏幕底部弹出半透明PopupWindow效果
- android 实现TextView实现跑马灯形式的字体
- Android(安卓)仿拼多多可水平滚动RecyclerView,自定义滚动条滚动
- 直播源码Android(安卓)屏幕常亮N秒后自动暗屏
- Android(安卓)横竖屏切换小结
- Webview setLayoutAlgorithm
- Android(安卓)自定义FloatView实现悬浮视图
- Activity简介