android - 以编程方式创建自定义 ProgressBar 可绘制对象
问题描述
我需要以编程方式更改水平进度条的颜色。我需要设置进度条color
和背景backgroundColor
所以我需要为我的进度条设置一个新的progressDrawable或更改现有的。
进度条xml:
<ProgressBar
android:id="@+id/pb_stat_value"
style="@style/CustomProgressBar"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="@dimen/margin_prog_bar_medium"
android:layout_weight="5" />
CustomProgressBar
风格:
<style name="CustomProgressBar" parent="android:Widget.ProgressBar.Horizontal">
<item name="android:indeterminateOnly">false</item>
<item name="android:progressDrawable">@drawable/custom_progress_bar_horizontal</item>
<item name="android:minHeight">@dimen/height_progress_bar_medium</item>
<item name="android:maxHeight">@dimen/height_progress_bar_large</item>
</style>
custom_pogress_bar_horizzontal.xml
我需要引用的:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape android:shape="rectangle" >
<solid android:color="@color/white" />
</shape>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<solid android:color="@color/black" />
</shape>
</clip>
</item>
</layer-list>
我正在尝试使用此代码,但我只得到背景:
val shape = GradientDrawable()
shape.shape = GradientDrawable.RECTANGLE
shape.setColor(backgroundColor)
pbStatValue.progressDrawable = shape
解决方案
我使用 Drawable 扩展来转述这一点:
的翻译<item android:id="@android:id/background">
val item1 = GradientDrawable()
item1.shape = GradientDrawable.RECTANGLE
item1.setColor(Utils.lighten(backgroundColor, 0.13))
的翻译<item android:id="@android:id/progress">
val shape = GradientDrawable()
shape.setColor(color)
val item2 = ClipDrawable(shape, Gravity.START, ClipDrawable.HORIZONTAL)
合并Drawables:
val array = arrayOf(item1, item2)
val listDrawable = LayerDrawable(array)
将其分配给可绘制的进度条
pbStatValue.progressDrawable = listDrawable
推荐阅读
- r - 如何制作表格,包括 R 中调查的权重?
- python - 循环遍历列的有效方法
- python-3.x - 错误:没有为 ipython==7.18.1 找到匹配的分布
- entity-framework-core - 在 Firebird 2.5 EF Core 上定义“一对一”关系
- unit-testing - 为什么在 Angular 10 单元测试中没有将 FormControl 标记为脏?
- javascript - 如何使用 react-pdf 进行自动换行
- assembly - 为 arm32 构建 GLIB 时,asm 中的输出约束“=d”无效(Windows)
- google-apps-script - 需要帮助使用 Google Apps 脚本构建 Telegram 网络应用程序
- selenium-webdriver - @FindBy 使用 xpath 与 linkText
- python - psycopg2 错误:在行号上的字符串格式化期间并非所有参数都转换:执行 SELECT 计数语句时为 46