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

时间:2012-06-07 11:18:06

标签: java android user-interface

我正在构建一个Android应用程序,我想创建一个非常类似于MIUI文件资源管理器底部所见的进度条

MIUI File Explorer App

据我所知,没有完全明显的解决方案。 到目前为止,我能想到的是

  • 将许多具有透明背景的进度条分层放在彼此之上
  • 扩展Progress bar类以获取多个值并重写onDraw方法

我认为第一种选择太慢而且效率低,但第二种选择可能过于复杂,但肯定是更好的解决方案。

有没有更好的方法来解决这个问题?

5 个答案:

答案 0 :(得分:6)

你应该为它制作一个自定义视图。例如:

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);

答案 1 :(得分:1)

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

我可以建议你从音乐颜色的0B到14.9GB之间绘制一个填充的矩形,从视频颜色的939MB到14.9GB,从图片颜色的3.52GB到14.9GB,依此类推

然后,您可以将背景颜色的圆角末端绘制为蒙版。

这很快,因为你只是绘制图形基元,你可以根据需要扩展它。

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

答案 2 :(得分:0)

以下是基于@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" />

https://github.com/muneikh/SegmentedProgressBar

enter image description here

答案 3 :(得分:0)

对于其他可以帮助的人,我在基于@Zelleriation答案的github上留下一个示例。进度栏。

这可以适应我的需求,随时将其修改为您的需求。

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

在您的活动中。

val binding = ActivityMainBinding.inflate(layoutInflater)

 binding.progress.setMax(100F)
        binding.progress.setPrimaryProgress(40F)
        binding.progress.setSecondaryProgress(10F)
        binding.progress.setThirdProgress(40F)

链接:https://github.com/EKRLAZ/segmented-progressbar

enter image description here

答案 4 :(得分:-1)

亲爱的请参阅api demo中的android SKD 2.2示例 API演示中的构建转到视图 - &gt;进度条 - &gt;增量然后你看到问题的解决方案。