自定义横向进度条
主布局文件中包 含
<LinearLayout
android:id="@+id/linearlayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/color_white_real"
android:orientation="vertical"
android:paddingBottom="@dimen/x5"
android:paddingLeft="@dimen/x15"
android:paddingTop="@dimen/y15"></LinearLayout>
进度条布局:
<?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:layout_marginBottom="@dimen/x10"
android:gravity="center_vertical"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/lin_coma"
android:layout_width="@dimen/x75"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:maxEms="5"
android:singleLine="true"
android:ellipsize="end"
android:text="哈/哈/哈啊啊啊啊啊"
android:textColor="#ff969696"
android:textSize="12sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/bar_container"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginRight="@dimen/x10"
android:gravity="left|center_vertical"
android:orientation="horizontal">
<TextView
android:id="@+id/bar"
android:layout_width="wrap_content"
android:layout_height="@dimen/y12"
android:background="#0CD3F4" />
<TextView
android:id="@+id/percent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0.00%"
android:layout_marginLeft="@dimen/x10"
android:layout_marginRight="@dimen/x10"
android:textColor="@color/color_light_bule"
android:textSize="12sp" />
</LinearLayout>
</LinearLayout>
通过往linnarlayout中循环添加布局实现进度条
//获取data集合中包含的进图条数据,循环添加到一个新的double集合中,
private void showColumnar(List<SuccessCaseMyMainlistBean.DataBean> 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);
}
}