11

我想设置一个视图背景,它是垂直条纹的规则网格。条纹在两种颜色之间交替。(例如,在单行中,可能有 6 个浅灰色像素,然后是 2 个深灰色像素,重复以填充宽度。)

使用位图(作为资源或在代码中生成)很容易做到这一点。例如:

ShapeDrawable bg = new ShapeDrawable(new RectShape());
int[] pixels = new int[] { 0xFFCCCCCC, 0xFFCCCCCC, 0xFFCCCCCC,
    0xFFCCCCCC, 0xFFCCCCCC, 0xFFCCCCCC, 0xFF999999, 0xFF999999};
Bitmap bm = Bitmap.createBitmap(pixels, 8, 1, Bitmap.Config.ARGB_8888);
Shader shader = new BitmapShader(bm,
    Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);
bg.getPaint().setShader(shader);
view.setBackgroundDrawable(bg);

有没有办法在不使用位图资源的情况下严格按照 XML drawable 执行此操作?

4

1 回答 1

7

不幸的是,但我很确定答案是否定的。

在所需的三个任务中,只有两个可以在没有任何代码的情况下完成。您可以将条纹图案的基础创建为<layer-list>两个或多个<shape>项目中的一个。<bitmap>您还可以使用XML 可绘制对象创建重复的平铺图案。诀窍是所需的中间步骤:<bitmap>不会接受另一个可绘制对象作为源值(只有图像),因此如果没有一点代码的干预来创建位图(就像您所写的那样),就无法将两者链接起来。

我希望看到平铺模式也适用于更多可绘制对象,并且 +1 为我提供了一个完全在代码中创建模式的示例:)

于 2011-02-18T17:57:01.710 回答