如何在Android中使用步骤创建间歇性动态进度条?

问题描述

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

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

Intermittent Progress Bar

我正在寻找有关如何操作的一般指导,因为我是新手。

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

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

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

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

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

感谢您抽出宝贵时间。

解决方法

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

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

更新 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 与适配器一起使用。