淘宝菜单滑动条,图如下;

实现一下这个效果 , 上面是列表,可以用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数量) 

更多相关文章

  1. android 中的PopupWindow 弹出菜单
  2. Android仿Iphone屏幕底部弹出半透明PopupWindow效果
  3. android 实现TextView实现跑马灯形式的字体
  4. Android(安卓)仿拼多多可水平滚动RecyclerView,自定义滚动条滚动
  5. 直播源码Android(安卓)屏幕常亮N秒后自动暗屏
  6. Android(安卓)横竖屏切换小结
  7. Webview setLayoutAlgorithm
  8. Android(安卓)自定义FloatView实现悬浮视图
  9. Activity简介

随机推荐

  1. SQLite多线程操作数据库
  2. android repo 切换分支
  3. android 之SharedPreference
  4. Instant Run requires 'Tools | Android
  5. android开发中adb的用法
  6. 轉載 :【转】android UI 相关常用类简介
  7. Android 监听系统虚拟导航栏按键
  8. android 使用动画实例[1]
  9. Android的多种数据存储方式
  10. android中sqlite数据库升级方案