0

我想在 Android Studio 中创建一个动态间歇进度条(如下图所示),它将根据用户的选择改变其间隔。

这个想法是用户将选择他希望执行多少次行为,然后条将相应地分段。然后每次他们执行该行为时,条形图都会为步进增量着色,如下图所示。

间歇性进度条

我正在寻找一些关于如何做到这一点的一般指导,因为我是新手。

我想到了 3 种方法来做到这一点:

  1. 有很多png。每种情况的可绘制对象或向量,并在图像视图中相应地使用一个。(对我来说似乎有点愚蠢)

  2. 创建与间隔一样多的视图,然后相应地更改视图颜色(在这种情况下,动态部分会出现问题,即间隔可变性)

  3. 以某种方式自定义水平 ProgressBar 以自动执行此操作。

我在互联网上搜索了对我来说最优雅的第三种方式,但找不到答案。

感谢您的时间。

4

1 回答 1

0

这实际上是使用当前ProgressBarAPI 获得的微不足道的。

根据所需的任务数量和完成的任务数量,您可以更新ProgressBar使用setMaxsetProgress

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适配器。

于 2021-06-15T18:58:55.383 回答