2011-02-18 5 views
10

Quiero establecer un fondo de vista que es una cuadrícula regular de rayas verticales. Las rayas se alternan entre dos colores. (Por ejemplo, en una sola fila, puede haber 6 píxeles de gris claro seguidos por 2 píxeles de gris oscuro, que se repiten para completar el ancho.)Vertical-striped background in XML?

Es fácil hacerlo con un mapa de bits (ya sea como recurso o generado en código). Por ejemplo:

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

¿Hay alguna manera de hacer esto estrictamente como XML drawwables, sin usar recursos de mapa de bits?

+0

Gracias por el fragmento 'BitmapShader'. Estaba luchando para hacer esto en XML y no estaba al tanto del enfoque de sombreado. –

Respuesta

7

Desafortunado, pero estoy bastante seguro de que la respuesta es no.

De las tres tareas requeridas, solo dos podrían realizarse sin ningún código. Puede crear la base del patrón de rayas como <layer-list> de dos o más elementos <shape>. También puede crear un patrón de mosaico repetitivo usando <bitmap> XML drawable. El truco es el paso intermedio requerido: <bitmap> no aceptará otro dibujable como valor fuente (solo una imagen) por lo que no hay forma de vincular los dos sin la intervención de un pequeño código para crear un mapa de bits (como lo que ha escrito) .

Me gustaría ver a los modos de baldosas aplicadas a más dibujables también, y 1 por darme una muestra de crear el patrón completo de código :)

+0

Gracias por los comentarios. Esa fue mi impresión también. Demasiado. :( –