我想设置一个视图背景,它是垂直条纹的常规网格。条纹在两种颜色之间交替。 (例如,在一行中,可能有6个像素的浅灰色,然后是2个深灰色的像素,重复以填充宽度。)
使用Bitmap(作为资源或在代码中生成)很容易。例如:
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 drawables这样做,而不使用位图资源?
答案 0 :(得分:7)
不幸的是,但我很确定答案是肯定的。
在所需的三项任务中,只有两项可以在没有任何代码的情况下完成。您可以将条纹图案的基础创建为两个或更多<layer-list>
项的<shape>
。您还可以使用<bitmap>
XML drawable创建重复图块模式。诀窍是所需的中间步骤:<bitmap>
不会接受另一个drawable作为源值(只是一个图像)所以没有办法在没有一点代码干预的情况下链接两者来创建一个Bitmap(比如什么你写的。)
我希望看到平铺模式也应用于更多的drawables,并且+1给我一个在代码中完全创建模式的示例:)