android - 如何创建像指标一样的圆形进度条(饼图) - Android

标签 android android-progressbar

现在我有一个水平进度条,它通过 ProgressBar setProgress 方法以编程方式更新:

<ProgressBar
            style="@android:style/Widget.ProgressBar.Horizontal"
            android:layout_width="0dip"
            android:layout_weight="1"
            android:layout_height="20dip"
            android:id="@+id/progressbar"
            >
    </ProgressBar>

有没有办法将此进度条转换为圆形(饼图)并能够以编程方式更新进度?

我想要的例子:

最佳答案

您可以制作自定义 View (例如 PieProgressView)或自定义 Drawable(例如 PieProgressDrawable)。我采用了自定义 View 方法,但两者都完全可行。

快速浏览 Android 的 ProgressView 的源代码产生一个非常复杂的实现。显然,它们涵盖了所有基础,但您不必编写那么复杂的东西。我们真的只需要两件事:

  1. 跟踪当前进度的成员。
  2. 一种根据当前进度绘制饼图的方法。

第一个很简单,只需保留一个成员字段来跟踪要绘制的饼图的当前百分比。数字 2 有点复杂,但幸运的是,我们可以使用标准的 Canvas 绘制方法来完成。

很方便,安卓的Canvas类提供了一个 drawArc()方法。您可以使用它来获得Pie 效果。假设我们将百分比存储在名为 mPercent 的成员字段中,作为 0 到 1 之间的 float ,onDraw() 方法可能如下所示:

@Override
protected void onDraw(Canvas canvas) {

    final float startAngle = 0f;
    final float drawTo = startAngle + (mPercent * 360);

    // Rotate the canvas around the center of the pie by 90 degrees
    // counter clockwise so the pie stars at 12 o'clock.
    canvas.rotate(-90f, mArea.centerX(), mArea.centerY());
    canvas.drawArc(mArea, startAngle, drawTo, true, mPaint);

    // Draw inner oval and text on top of the pie (or add any other
    // decorations such as a stroke) here..
    // Don't forget to rotate the canvas back if you plan to add text!
    ...
}

这是示例应用中完成的 View 的样子:

PieProgressView in action!

编辑

自发布以来,我已经确定您真的没有理由需要实现自定义 View 。您可以简单地使用可绘制对象及其级别属性来完成所需的操作。我做了一个gist with the full drawable .

关于android - 如何创建像指标一样的圆形进度条(饼图) - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12458476/

相关文章:

java - 如何通过android中的代码关闭和重新启动模拟器?

javascript - React Native DrawerLayoutAndroid 和 Navigator 之间的冲突

Android进度条背景不透明度

android - 不可见的进度条未通过代码显示

android - 多个运行时权限 - 仅请求第一个

android - 在 ListView 中突出显示行的边框

java - 当我尝试模拟我的应用程序时出错

Android:Facebook 应用程序使用什么来进行 ProgressDialog/Loading

Android - requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS) 做什么?

android - 如何在 Android drawable 中为环形制作圆角