如何在Android中的ListView项的底部添加简单条形图?

时间:2012-12-26 20:44:30

标签: android listview dynamic graph progress

我使用自定义XML布局listview_goal_item.xml来表示我希望ListView项目的显示方式。这种XML布局如下:

cursor_adapter_goals = new SimpleCursorAdapter(this,
            R.layout.listview_goal_item,
            matrix_cursor_goals, listview_fields, listview_columns);

一切都很好,我可以很容易地理解如何在listview_fields(我的值的字符串数组)和listview_columns(我的自定义ListView布局中的目标小部件的字符串数组)中显示所有信息,因为它们之间存在直接的固定关系这些项目。

我想为ListView中的每个目标项显示一个固定的“进度”条形图。此条形图将是用户基于他们达到目标的百分比的简单直观表示,75%意味着条形图将占据ListView宽度的3/4,宽度的50%1/2等等。这是我感到困惑的地方。

我该如何处理?我应该创建某种动态9补丁图像吗?我应该创建一个简单的表格,其中一行的动态大小与黑色表背景上的对比色一致吗?

如果你能以编程方式和所需的XML方式向我推进正确的方向,我将非常感激!

1 个答案:

答案 0 :(得分:2)

将ProgressBar添加到项目布局的底部,这是我用作列表视图项目的整个背景的一个(作为FrameLayout的元素,另一个元素是与列表项的其余部分,TextViews等的布局:

 <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_margin="0dp"
        android:padding="0dp"
        android:progressDrawable="@drawable/progress_timer" />

根据您的需要更改layout_*等。

注意使用的drawable。引用的drawable只是一个图层列表,其中的项目包含进度条drawable所需的id个。另请注意背景设置为透明:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item
    android:id="@android:id/background"
    android:drawable="@android:color/transparent"/>
<item android:id="@android:id/secondaryProgress">
    <scale
        android:drawable="@color/..."
        android:scaleWidth="100%" />
</item>
<item android:id="@android:id/progress">
    <scale
        android:drawable="@color/..."
        android:scaleWidth="100%" />
</item>
</layer-list>

在您的代码中,您只需将其视为任何ProgressBar:

ProgressBar progressBar = (ProgressBar) convertView.findViewById(R.id.progressBar);

更新时:

progressBar.setMax(100); //100 for example for percent
progressBar.setProgress(20); //20% done