martedì 22 febbraio 2011

Android, ClipDrawable


La risorsa ClipDrawable, tag clip nei file xml, descrive una risorsa come una porzione di un'altra risorsa Drawable. La porzione selezionata inizialmente può essere variata nel codice attraverso il metodo setLevel(int level) (che assegna un valore nell'intervallo 0-10000). Questa risorsa viene usata, come nell'esempio sopra, per la realizzazione di barre di avanzamento.
Nel codice il riferimento è ottenuto attraverso la sintassi R.drawable.resource_name, nei file xml con @drawable/resource_name. Il nome dato al file xml che descrive la risorse è anche l'id per la stessa. La risorsa di tipo Drawable da cui effettuare il taglio è specificata per mezzo dell'attributo android:drawable. La direzione in cui va tagliata la risorsa, invece, attraverso l'attributo android:clipOrientation (a cui possiamo passare i valori horizontal o vertical). Con l'attributo android:gravity, infine, possiamo indicare dove iniziare il taglio.
Il codice sorgente dell'esempio è disponibile qui. L'applicazione realizza una barra di avanzamento comandata dai click dell'utente su due bottoni del layout. Attenzione, il codice non si preoccupa di gestire il livello della risorsa tagliata (che può dunque andare oltre i valori riconosciuti)!
Nella cartella res/drawable/ (da me creata) si trova il file bar.png, l'intera barra di avanzamento. Nella stessa cartella il file progess_bar.xml descrive la risorsa ClipDrawable come taglio della risorsa android:drawable="@drawable/bar" (l'immagine bar.png). La risorsa viene tagliata in orizzontalmente (android:clipOrientation="horizontal"), a partire da sinistra (android:gravity="left"). Nella cartella res/layout/ il file main.xml descrive il layout applicato all'activity. E' qui che viene usata la risorsa ClipDrawable, in una ImageView. Vengono poi aggiunti i due bottoni per comandare la barra di avanzamento. Nel codice sorgente, dopo aver ottenuto un riferimento ai due bottoni, si procede alla regolazione del taglio in questo modo (+1000 per l'aumento, -1000 per la diminuzione):
ImageView resourceImageView=(ImageView)findViewById(R.id.clip_image);
ClipDrawable drawableClip=(ClipDrawable)resourceImageView.getBackground();
drawableClip.setLevel(drawableClip.getLevel()+1000);
Potete installare questa applicazione sul vostro dispositivo Android anche attraverso il seguente codice QR:

qrcode

Nessun commento:

Posta un commento