0

我有一个ImageView如下所示:

 <ImageView
    android:id="@+id/barchart"
    android:layout_width="100dp"
    android:layout_height="6dp"
    android:layout_below="@+id/stats"
    android:layout_marginTop="9dp"
    android:layout_toRightOf="@+id/model"
    android:background="@android:color/white" />

所以,这个图像基本上会以白色横条的形式来表示。现在,我想根据动态值为其宽度着色。如果值为 30dp,则图像的 30dp 将为一种颜色,其余 70dp 将为白色。ImageView

所以,目的基本上是用条形图的形式来表示。

4

2 回答 2

1

最简单的方法是覆盖 View 类并手动绘制条形图。甚至可能不是一个条纹,而是整个图表。这很容易做到。像这样的东西:

class ChartView extends View {
    Paint paint = new Paint();
    List<Rect> stripes = new ArrayList<Rect>();
    List<Integer> colors = new ArrayList<Integer>();

    public ChartView(Context context) {
        super(context);
    }

    @Override
    public void draw(Canvas canvas) {
        super.draw(canvas);
        for (Rect r : stripes) {
            paint.setColor(colors.get(stripes.indexOf(r)));
            canvas.drawRect(r, paint);
        }
    }
}

当然,使用 rects 存储条形图是一个相当糟糕的主意。此外,您必须更改绘图部分以实现双色条,但我希望您明白这一点。

http://developer.android.com/reference/android/graphics/Canvas.html http://developer.android.com/reference/android/graphics/Paint.html

于 2013-03-19T09:30:18.490 回答
1

可能重复:带两种颜色的带状背景?

您可以看到xml创建它的dynamic方式和设置它的方式。

于 2013-03-19T09:30:44.530 回答