mercoledì 23 febbraio 2011

Android, LayerList


La risorsa LayerList, tag layer-list nei file xml, è in grado di visualizzare sotto un'unica immagine un array di risorse Drawable. Ogni risorsa viene disegnata rispettando l'ordine all'interno dell'array. La risorsa Drawable in coda all'array è la risorsa più alta in livello. L'aggiunta all'array avviene attraverso elementi item (figli, dunque, di layer-list). L'attributo android:drawable di item specifica la risorsa da aggiungere all'array mentre con android:id possiamo dare un id a ogni livello dell'immagine finale. I vari livelli possono essere spostati in alto, in baso, a destra e a sinistra rispettivamente con android:top, android:bottom, android:right e android:left (a cui occorre passare uno scostamento, usando una delle dimensioni riconosciute da Android). Il riferimento alla risorsa all'interno del codice avviene con la sintassi R.drawable.resource_name, nel file xml con @drawable/resource_name.
Il codice sorgente dell'esempio è disponibile qui. Nella cartella res/drawable/ si trovano i file cielo.png, nuvole.png e sole.png. Tutte usate nel file levels.xml per la composizione, su livelli, di una risorse di tipo LayerList. Quest'ultima viene quindi usata nell'activity principale, al layout main.xml (nella cartella res/layout/). Allo stesso layout ho poi aggiunto tre bottoni, la pressione di ognuno di questi provvede alla realizzazione di un nuovo oggetto LayerDrawable applicato quindi all'oggetto ImageView, in questo modo:
ImageView image=(ImageView)findViewById(R.id.image);
Drawable new_layers[]=new Drawable[2];
new_layers[0]=getResources().getDrawable(R.drawable.cielo);
new_layers[1]=getResources().getDrawable(R.drawable.sole);
LayerDrawable new_image=new LayerDrawable(new_layers);
image.setImageDrawable(new_image);
Potete installare questa applicazione sul vostro dispositivo Android anche attareverso il seguente codice QR:

qrcode

2 commenti:

  1. Ciao, avrei una domanda sulle layer-list:
    è possibile inserire all'interno di un item un bottone, in particolare un ImageButton?
    Veronica

    RispondiElimina
  2. Non ho provato, ma credo di si anche se sarebbe inutile (trattandosi di una risorsa Drawable non puoi gestirne l'interazione).
    Cosa intendi fare? Far comparire o nascondere elementi ImageButton attivandone la visibilità dei rispettivi livelli?
    Non so che tipo di applicazione o utilizzo hai in mente ma nella maggior parte dei casi è preferibile non appesantire l'activity e invocarne altre nel corso dell'applicazione.

    RispondiElimina