【发布时间】:2014-02-15 12:25:24
【问题描述】:
我正在尝试创建一个圆形进度条。这就是我想要实现的目标
有一个灰色的背景环。在它上面,会出现一个蓝色进度条,它在 60 秒或任何秒数内以从 0 到 360 的圆形路径移动。
这是我的示例代码。
<ProgressBar
android:id="@+id/ProgressBar"
android:layout_width="match_parent"
android:layout_height="match_parent"
style="?android:attr/progressBarStyleLarge"
android:indeterminateDrawable="@drawable/progressBarBG"
android:progress="50"
/>
为此,在可绘制的“progressBarBG”中,我创建了一个图层列表,并在该图层列表中给出了两个项目,如图所示。
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape
android:shape="ring"
android:innerRadius="64dp"
android:thickness="8dp"
android:useLevel="false">
<solid android:color="@color/grey" />
</shape>
</item>
<item android:id="@android:id/progress">
<clip>
<shape
android:shape="ring"
android:innerRadius="64dp"
android:thickness="8dp"
android:useLevel="false">
<solid android:color="@color/blue" />
</shape>
</clip>
</item>
现在,第一个灰色环生成良好。然而,蓝色环从可绘制对象的左侧开始并向右移动,就像线性进度条的工作方式一样。这就是进度 50% 时的显示方式,红色箭头指示方向。
我想按预期在圆形路径中移动蓝色进度条。
【问题讨论】:
-
我在发布这个问题之前看过。我找到了一些答案,但它们不适用于我想要实现的目标。也许有人认为这是重复的帖子而对我投了反对票。
-
我认为您需要一个定制的解决方案。 ProgressBar,当不处于不确定模式时,使用可绘制的剪辑来剪辑可绘制的进度层。但是剪辑可绘制对象只能水平或垂直工作,而不是角楔。我认为您必须创建 Drawable 的子类来绘制跨越
getLevel()*360度的弧。然后,由于您不能在 xml drawable 中使用自定义视图,因此您必须将 ProgressBar 子类化,以便它直接使用您的自定义 Drawable。 -
也许这可以为您指明正确的方向github.com/grmaciel/two-level-circular-progress-bar
标签: android progress-bar android-progressbar progress-indicator