Java 创建分段进度条的最佳方法?

Java 创建分段进度条的最佳方法?,java,android,user-interface,Java,Android,User Interface,我正在构建一个Android应用程序,我想创建一个进度条,非常类似于在MIUI文件浏览器底部看到的进度条 据我所知,没有完全显而易见的解决办法。 到目前为止我能想到的是 以透明背景将多个进度条层叠在一起 扩展进度条类以获取多个值并重写onDraw方法 我认为第一个方案速度太慢,效率太低,但第二个方案可能过于复杂,但肯定是更好的解决方案 有什么更好的方法吗?您应该为其创建自定义视图。例如: final Paint blue = new Paint(); blue.setColor(Color

我正在构建一个Android应用程序,我想创建一个进度条,非常类似于在MIUI文件浏览器底部看到的进度条

据我所知,没有完全显而易见的解决办法。 到目前为止我能想到的是

  • 以透明背景将多个进度条层叠在一起
  • 扩展进度条类以获取多个值并重写onDraw方法
我认为第一个方案速度太慢,效率太低,但第二个方案可能过于复杂,但肯定是更好的解决方案


有什么更好的方法吗?

您应该为其创建自定义视图。例如:

final Paint blue = new Paint();
blue.setColor(Color.BLUE);

View progressBar = new View(getActivity()){

        protected void onDraw(android.graphics.Canvas canvas) {

            canvas.drawRect(0,0,getWidth()*progressPecentFirst,getHeight(),blue);
            blue.setColor(Color.RED);
            canvas.drawRect(0,0,getWidth()*progressPecentSecond,getHeight(),blue);
            //Repeat this
        };
    };
parentLayout.addView(progressBar);

一个选择是根本不让它成为传统的进度条。在我的一个个人应用程序中,我需要一个类似于圆形进度条的显示器,它有不同颜色的部分

我建议您首先绘制一个填充矩形,音乐颜色从0B到14.9GB,视频颜色从939MB到14.9GB,图片颜色从3.52GB到14.9GB,等等

然后,您可以只绘制背景色中的圆形端点作为遮罩

这将是相当快的,因为您只绘制图形原语,并且可以根据需要对其进行扩展


唯一的一个小缺点是你必须自己实现大部分逻辑,但在我看来,这是一个很小的代价。

亲爱的,请查看API演示中android SKD 2.2的内置示例API演示,进入查看->进度条->增量,然后您就会看到问题的解决方案。

这是基于@Zelleriation答案的分段进度条。进度条

    SegmentedProgressBar progressBar = (SegmentedProgressBar) findViewById(R.id.segmentedProgressBar);
    progressBar.setProgressColor(Color.BLACK);
    progressBar.publishProgress(0.5f);

    <com.muneikh.SegmentedProgressBar
     android:id="@+id/segmentedProgressBar"
     android:layout_width="match_parent" />
SegmentedProgressBar progressBar=(SegmentedProgressBar)findViewById(R.id.SegmentedProgressBar);
progressBar.setProgressColor(Color.BLACK);
progressBar.出版进度(0.5f);


对于其他能够提供帮助的人,我在我的github上留下了一个基于@Zelleriation answer的示例。进度条

    SegmentedProgressBar progressBar = (SegmentedProgressBar) findViewById(R.id.segmentedProgressBar);
    progressBar.setProgressColor(Color.BLACK);
    progressBar.publishProgress(0.5f);

    <com.muneikh.SegmentedProgressBar
     android:id="@+id/segmentedProgressBar"
     android:layout_width="match_parent" />
这适合我的需要,请随意修改为您的。

<io.ekrlaz.segmentedprogressbar.view.SegmentProgressBar
            android:id="@+id/progress"
            android:layout_width="match_parent"
            android:layout_height="10dp"
            app:cornerRadius="16dp"
            />
链接:


标准进度条严格限制为两段。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-@约翰·斯卡尔:谢谢你强调这一点。我已更新了答案,以包含基本信息。