总共介绍两种方式,一种是在xml文件中写死的,一种是java代码动态设置的,第二种的优势就是可以动态设置,比如根据用户设置或者后台回传的样式来动态进行设置。
第一种 xml 设置
直接 drawable 文件夹下新建一个 xml 文件,配置代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<corners android:radius="5dp" />
<solid android:color="#E4E7ED" />
</shape>
</item>
<item android:id="@android:id/secondaryProgress">
<clip>
<shape>
<corners android:radius="5dp" />
<solid android:color="#E4E7ED" />
</shape>
</clip>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<corners android:radius="5dp" />
<solid android:color="#409EFF" />
</shape>
</clip>
</item>
</layer-list>
设置background, secondaryProgress, progress的颜色和弧度值。
然后在布局文件中设置进去
<ProgressBar
android:id="@+id/install_progress"
style="?android:attr/progressBarStyleHorizontal"
android:progressDrawable="@drawable/progress"
android:layout_width="match_parent"
android:layout_height="4dp"/>
第二种 java代码动态设置
原理一样,在代码中给 Drawable 设置背景和弧度值,最后设置给 progressBar,下边附上代码:
int roundRadius = 8; // 圆角半径 The x-radius of the oval used to round the corners
//准备progressBar带圆角的背景Drawable
GradientDrawable progressBg = new GradientDrawable();
//设置圆角弧度
progressBg.setCornerRadius(roundRadius);
//设置绘制颜色
progressBg.setColor(Color.parseColor("#E4E7ED"));
//准备progressBar带圆角的进度条Drawable
GradientDrawable progressContent = new GradientDrawable();
progressContent.setCornerRadius(roundRadius);
//设置绘制颜色,此处可以自己获取不同的颜色
progressContent.setColor(Color.parseColor("#409EFF"));
//ClipDrawable是对一个Drawable进行剪切操作,可以控制这个drawable的剪切区域,以及相相对于容器的对齐方式
ClipDrawable progressClip = new ClipDrawable(progressContent, Gravity.START, ClipDrawable.HORIZONTAL);
//设置progressBarDrawable
progress.setProgressDrawable(progressClip);
progress.setBackground(progressBg);
这样即可实现,当时progressBar也可以在代码中动态生成,然后动态设置位置,都是可以的,根据自己的需求来实现即可。