在Android中实现图表或进度条

在Android中实现图表或进度条,android,android-progressbar,Android,Android Progressbar,我想在Android中实现一个进度条或图表,如下所示: 那么,是否有任何第三方库或任何我可以遵循的示例?事实上,这种观点是什么?它是包含3个阶段的进度条还是图表?首先,您需要了解可绘制资源: 这就是我们将要用来制作这个图形的东西 首先,我们将从绿色条开始。绿色条将占据整个宽度,我们将用其他图形覆盖它。这将是一个可拉伸的形状 /res/drawable/green_bar.xml: <?xml version="1.0" encoding="utf-8"?> <shape xm

我想在Android中实现一个进度条或图表,如下所示:


那么,是否有任何第三方库或任何我可以遵循的示例?事实上,这种观点是什么?它是包含3个阶段的进度条还是图表?

首先,您需要了解可绘制资源:

这就是我们将要用来制作这个图形的东西

首先,我们将从绿色条开始。绿色条将占据整个宽度,我们将用其他图形覆盖它。这将是一个可拉伸的形状

/res/drawable/green_bar.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <solid android:color="#FF009900"/>
    <size android:height="12dp" android:width="12dp"/>
    <corners android:radius="6dp"/>
</shape>
现在我们将使用它作为通用视图的背景:

(摘自/res/layout/activity_main.xml)

这一点很重要:因为
pointybar.xml
中的
secondary
列在
primary
之前,所以我们必须确保始终在
ssconondary
上设置较高级别,在
primary
上设置较低级别。如果较高的级别在主
上,则它将覆盖次
而您将看不到它。(也许我应该给ID起个更好的名字。我走得太快了。)

这就是最终的结果


看看我们是如何在XML中实现这一点的?这就是谷歌希望您这样做的方式。

首先,您需要了解可绘制资源:

这就是我们将要用来制作这个图形的东西

首先,我们将从绿色条开始。绿色条将占据整个宽度,我们将用其他图形覆盖它。这将是一个可拉伸的形状

/res/drawable/green_bar.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <solid android:color="#FF009900"/>
    <size android:height="12dp" android:width="12dp"/>
    <corners android:radius="6dp"/>
</shape>
现在我们将使用它作为通用视图的背景:

(摘自/res/layout/activity_main.xml)

这一点很重要:因为
pointybar.xml
中的
secondary
列在
primary
之前,所以我们必须确保始终在
ssconondary
上设置较高级别,在
primary
上设置较低级别。如果较高的级别在主
上,则它将覆盖次
而您将看不到它。(也许我应该给ID起个更好的名字。我走得太快了。)

这就是最终的结果


看看我们是如何在XML中实现这一点的?这就是谷歌希望你这样做的方式。

看起来像一张图表。你是在问如何使用原始Android代码,还是如何使用MPAndroidChart?我可以解释如何用代码来实现它。你不需要进度条。@krislarson如何使用代码?谢谢。看起来像一张图表。你是在问如何使用原始Android代码还是使用MPAndroidChart?我可以解释如何用代码来实现它。你不需要进度条。@krislarson如何使用代码?谢谢,很好!不过,是我还是酒吧里的空白与灰白色背景不一样?很好。非常令人印象深刻。谢谢你,克里斯。@cricket_007不是你。我使用全白色作为倾斜形状,但默认主题必须使用灰白色作为背景。白色被烘焙到九块PNG中。我考虑过编写一个自定义的
Drawable
,它将使用
Path
来绘制尖尖的形状,但这意味着我必须用XML编写其余所有的Drawable,因为您无法注入自定义的Drawable。安全风险,很好!不过,是我还是酒吧里的空白与灰白色背景不一样?很好。非常令人印象深刻。谢谢你,克里斯。@cricket_007不是你。我使用全白色作为倾斜形状,但默认主题必须使用灰白色作为背景。白色被烘焙到九块PNG中。我考虑过编写一个自定义的
Drawable
,它将使用
Path
来绘制尖尖的形状,但这意味着我必须用XML编写其余所有的Drawable,因为您无法注入自定义的Drawable。安全风险。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/green_bar" android:gravity="fill_horizontal"/>
    <item android:id="@+id/secondary" android:drawable="@drawable/scalepointy"/>
    <item android:id="@+id/primary" android:drawable="@drawable/scalepointy"/>
</layer-list>
    <View
        android:id="@+id/bargraph"
        android:layout_width="match_parent"
        android:layout_height="12dp"
        android:layout_marginLeft="32dp"
        android:layout_marginRight="32dp"
        android:background="@drawable/pointybar"/>
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("Pointy Chart Demo");

        View view = findViewById(R.id.bargraph);

        LayerDrawable layerDrawable = (LayerDrawable) view.getBackground();

        Drawable d1 = layerDrawable.findDrawableByLayerId(R.id.primary);
        d1.setLevel(6000); // 60%

        Drawable d2 = layerDrawable.findDrawableByLayerId(R.id.secondary);
        d2.setLevel(8000);  // 80%
    }