Android仿淘宝首页横条指示器

淘宝首页菜单底部的滑动位置指示器该如何实现呢?

Android仿淘宝首页横条指示器_第1张图片

实现方法:

1.上方横滑列表可以直接使用RecyclerView GridLayoutManager横向实现
2.指示器实现步骤:
(1) .计算出RecyclerView划出屏幕的距离w1和剩余宽度w2的比例y,y = w1 / (总宽度w3 - 可使视区域宽度w4)
(2) .计算出指示器该移动的距离w5 = y * (指示器的总宽度w6 - 滑块宽度w7)
(3) .指示器布局

  
        
  

indicator_bg_normal.xml



    
    

indicator_bg_select.xml



    
    

(4) .实现代码

 rvMenu.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=0;
                int temp = rvMenu.computeHorizontalScrollRange();
                if (temp > range) {
                    range = temp;
                }
                //滑块的偏移量
                int offset = rvMenu.computeHorizontalScrollOffset();
                //可视区域长度
                int extent = rvMenu.computeHorizontalScrollExtent();
                //滑出部分在剩余范围的比例
                float proportion = (float) (offset * 1.0 / (range - extent));
                //计算滚动条宽度
                float transMaxRange = rlIndicator.getWidth() - mainLine.getWidth();
                //设置滚动条移动
                mainLine.setTranslationX(transMaxRange * proportion);
            }
        });

你可能感兴趣的:(Android)