我正在构建一个 Android 应用程序,我想创建一个非常类似于 MIUI 文件资源管理器底部的进度条
据我所知,没有完全明显的解决方案。到目前为止我能想到的是
- 将许多具有透明背景的进度条层叠在一起
- 扩展进度条类,取多个值,重写onDraw方法
我认为第一个选项太慢且效率低下,但第二个选项可能过于复杂,但绝对是更好的解决方案。
有没有更好的方法来解决这个问题?
我正在构建一个 Android 应用程序,我想创建一个非常类似于 MIUI 文件资源管理器底部的进度条
据我所知,没有完全明显的解决方案。到目前为止我能想到的是
我认为第一个选项太慢且效率低下,但第二个选项可能过于复杂,但绝对是更好的解决方案。
有没有更好的方法来解决这个问题?
你应该为它制作一个自定义视图。例子:
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 的颜色用于图片,等等。
然后,您可以将背景颜色的圆形末端绘制为蒙版。
这将非常快,因为您只绘制图形基元,并且可以根据需要扩展它。
唯一的小缺点是您必须自己实现大部分逻辑,但在我看来,这是一个很小的代价。
对于其他可以提供帮助的人,我根据@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)
这是基于@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" />
亲爱的,请在 api demo 中查看 android SKD 2.2 的示例API Demo中的构建转到查看 -> 进度条 -> 增量,然后您会看到问题的解决方案。