问题描述
我想在 Android Studio 中创建一个动态间歇进度条(如下图所示),它将根据用户的选择更改其间隔。
这个想法是,用户会选择他希望做多少次行为,然后条形会相应地碎片化。然后,每次他们执行该行为时,该条都会为步长增量着色,如下图所示。
我正在寻找有关如何操作的一般指导,因为我是新手。
我想到了 3 种方法来做到这一点:
-
有大量的 png。每种情况下的 drawable 或向量,并在图像视图中相应地使用一个。 (对我来说似乎有点愚蠢)
-
创建与间隔一样多的视图,然后相应地更改视图颜色(在这种情况下,动态部分会出现问题,即间隔可变性)
我在互联网上搜索了对我来说最优雅的第三种方式,但找不到答案。
感谢您抽出宝贵时间。
解决方法
使用当前的 ProgressBar
API 获得这实际上是微不足道的。
根据所需的任务数量和完成的任务数量,您可以使用 setMax
和 setProgress
ProgressBar
progressBar.setMax(totalTasks);
progressBar.setProgress(tasksDone);
这将覆盖进度条中的一小部分 tasksDone / totalTasks
。
编辑:根据评论中突出显示的场景,您可以简单地在 LinearLayout
中使用多个视图。
您可以使用带有所需分区颜色背景的 LinearLayout。
<LinearLayout
....
android:orientation="horizontal"
android:background="@color/partition"
....
/>
然后简单地以相同的权重(和水平边距)以编程方式添加子视图:-
for(task in tasks) {
val progressBar = View(this)
progressBar.marginEnd = gapRequired
// customize your view here: Set background,shape etc.
// Set the width to 0 and weight to 1f
val params = LinearLayout.LayoutParams(0,height,1f)
linearLayout.addView(view,index,params)
}
稍后修改单个视图(进度条的片段):-
val view = linearLayout.getChildAt(index)
// Modify the view as needed
从布局中删除视图:-
linearLayout.removeViewAt(index)
或者如果您引用了视图:-
linearLayout.removeView(view)
您还可以使用 linearLayout.removeAllViews()
如果您希望进度条中有很多这些片段,您可能希望将 RecyclerView
与适配器一起使用。