如何在android中为colorview的一部分着色

时间:2013-03-19 09:18:07

标签: android imageview bar-chart

我有一个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" />

因此,该图像基本上以白色水平条的形式表示。现在,我希望颜色ImageView宽度取决于动态值。如果值是30dp那么,图像的30dp将是一种颜色,其余70dp将是白色。

因此,目标基本上是以条形图的形式表示。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

可能重复:banded background with two colors?

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