2011-02-18 65 views
10

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

使用位图(或者作为资源或者用代码生成)。例如:

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可绘制,而不使用位图资源?

+0

感谢`BitmapShader`片段的样品。我一直在努力在XML中做到这一点,并没有意识到着色器的方法。 – 2013-01-25 15:16:57

回答

7

不幸的,但我敢肯定答案是否定的。

在所需的三项任务中,只有两项可以在没有任何代码的情况下完成。您可以创建条纹图案的底部,作为两个或多个<shape>项目的<layer-list>。您还可以使用<bitmap> XML drawable创建重复图块模式。诀窍是需要的中间步骤:<bitmap>将不会接受另一个可绘制的源值(仅用于图像),所以如果没有一点代码的干预来创建一个位图(就像你写的那样) 。

我很想看到应用到更多的可绘制以及瓷砖模式和+1给我的代码完成创建模式:)

+0

感谢您的反馈。这也是我的印象。太糟糕了。 :( – 2011-02-18 19:31:28