2011-02-18 3 views
10

Je veux définir un arrière-plan View qui est une grille régulière de bandes verticales. Les rayures alternent entre deux couleurs. (Par exemple, sur une seule ligne, il peut y avoir 6 pixels de gris clair suivis de 2 pixels de gris foncé, répétés pour remplir la largeur.)Fond à rayures verticales en XML?

Il est assez facile de le faire en utilisant un bitmap (soit comme ressource ou généré en code). Par exemple:

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

Existe-t-il un moyen de le faire strictement sous forme de tirages XML, sans utiliser de ressources bitmap?

+0

Merci pour l'extrait 'BitmapShader'. J'avais du mal à le faire en XML et je n'avais pas conscience de l'approche shader. –

Répondre

7

Malheureusement, mais je suis certain que la réponse est non.

Parmi les trois tâches requises, seules deux peuvent être effectuées sans code. Vous pouvez créer la base du motif de rayures en tant que <layer-list> de deux ou plusieurs éléments <shape>. Vous pouvez également créer un motif de mosaïque répétitif à l'aide d'un dessin XML <bitmap>. L'astuce est l'étape intermédiaire requise: <bitmap> n'acceptera pas un autre dessinable comme valeur source (seulement une image) donc il n'y a aucun moyen de lier les deux sans l'intervention d'un petit code pour créer un bitmap (comme ce que vous avez écrit) .

J'aimerais voir les modes de tuiles appliqués à plus dessinables aussi bien, et +1 pour me donner un échantillon de créer le modèle complètement dans le code :)

+0

Merci pour les commentaires. C'était aussi mon impression. Dommage. :( –