Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Vertical-striped background in XML?

I want to set a View background that is a regular grid of vertical stripes. The stripes alternate between two colors. (For example, across a single row, there might be 6 pixels of light gray followed by 2 pixels of dark gray, repeated to fill the width.)

It's easy enough to do this using a Bitmap (either as a resource or generated in code). For instance:

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);

Is there a way to do this strictly as XML drawables, without using bitmap resources?

like image 421
Ted Hopp Avatar asked Feb 18 '11 17:02

Ted Hopp


1 Answers

Unfortunate, but I'm pretty sure the answer is no.

Of the three tasks required, only two could be done without any code. You can create the base of the stripes pattern as a <layer-list> of two or more <shape> items. You can also create a repeating tile pattern using a <bitmap> XML drawable. The trick is the required middle step: <bitmap> will not accept another drawable as a source value (only an image) so there is no way to link the two without the intervention of a little code to create a Bitmap (like what you have written).

I would love to see tile modes applied to more drawables as well, and +1 for giving me a sample of creating the pattern completely in code :)

like image 150
devunwired Avatar answered Nov 10 '22 20:11

devunwired