Android 自定义横向进度条(可动态设置最大值)

自定义横向进度条

Android 自定义横向进度条(可动态设置最大值)_第1张图片

      主布局文件中包 含         

进度条布局:

        




    
        
    

    

        

        
    


通过往linnarlayout中循环添加布局实现进度条

//获取data集合中包含的进图条数据,循环添加到一个新的double集合中,
  private void showColumnar(List data) {
        doubles = new ArrayList<>();
        for (int i = 0; i < data.size(); i++) {
            int progress = data.get(i).getArticleNumber();
            doubles.add(progress);
        }
//切记在每次开始加载时清空linearlayout的UI
        linearlayout.removeAllViews();
        //赋值
        for (int i = 0; i < data.size(); i++) {
            //随机产生一个进度
//            final double ranNum = Math.random() * 100;
            int ranNum = data.get(i).getArticleNumber();
            if (ranNum <= 0) {
                ranNum = 0;
            }
            //设置最大值
            final int finalMaxScale = Collections.max(doubles);

            item = LayoutInflater.from(context).inflate(R.layout.success_columnar_item, linearlayout, false);
            LinearLayout lincoma = item.findViewById(R.id.lin_coma);
            TextView name = item.findViewById(R.id.name);
            TextView percent = item.findViewById(R.id.percent);
            final View bar = item.findViewById(R.id.bar);
            LinearLayout container = item.findViewById(R.id.bar_container);
            name.setText(data.get(i).getJobTitle());
            bar.setBackgroundResource(R.mipmap.line_porgess);
            percent.setText(NumberUtil.formatString(new BigDecimal(ranNum)));
            final double finalRanNum = ranNum;
            //计算出进度条应该显示的宽度
            final LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) bar.getLayoutParams();
//            lp.width = (int) ((width - width / 3) * finalRanNum / finalMaxScale);
//用你的屏幕宽度-你的布局中除进度条外其他布局的宽度*进度/最大值
//其中PxUtils是把dp转换为px,确保在不同屏幕下的适配
            lp.width = (int) ((this.width - PxUtils.dpToPx(170, context)) * finalRanNum / finalMaxScale);
            //设置动画,1.5秒内从0.0宽度变成1.0宽度(1.0代表100%)
            final ObjectAnimator anim = ObjectAnimator.ofFloat(bar, "alpha", 0.0F, 1.0F).setDuration(500);
            //动画监听
            anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator valueAnimator) {
                    //事实计算宽度,应该显示的宽度乘以当前进度,再事实设置给bar
                    bar.setLayoutParams(lp);
                }
            });
            //动画开始
            anim.start();
            //设置/隔断并添加隔断到linearlayout
            TextView textView = new TextView(context);
            textView.setHeight(PxUtils.dpToPx(10, context));
            linearlayout.addView(textView);
            //添加item到添加隔断到linearlayout
            linearlayout.addView(item);
        }

    }

你可能感兴趣的