2011-12-23 2 views
5

Ecco la versione semplificata del mio LayerList. Ha una bitmap in un oggetto per evitare il ridimensionamento. Voglio cambiare il drawable di questa bitmap a livello di codice. C'è un modo per fare questo?Cambia bitmap disegnabile in LayerListDrawable

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item 
     android:id="@+id/item" 
     android:left="165dp" 
     android:top="245dp" > 
     <bitmap 
      android:id="@+id/bitmap" 
      android:src="@drawable/tag_de_01" 
      android:gravity="top|left" /> 
    </item> 

</layer-list> 

ho provato la seguente senza successo:

Resources res = getResources(); 
LayerDrawable layerDrawable = (LayerDrawable) res.getDrawable(R.drawable.layer_list_drawable); 

Drawable newDrawable = (Drawable)res.getDrawable(R.drawable.something); 

// works, but scales the image because the drawable of the item is set instead the one of the bitmap 
layerDrawable.setDrawableByLayerId(R.id.item, newDrawable); 

// doesn't work at all 
layerDrawable.setDrawableByLayerId(R.id.bitmap, newDrawable); 
+2

Ho lo stesso problema. Qualcuno può aiutare? – Lobo

+1

Sei riuscito a trovare una risposta? –

risposta

0

Fusioni newDrawable a BitmapDrawable (supponendo che sia uno, ovviamente), e si può usare BitmapDrawable.setGravity allo stesso modo di usare l'androide : attributo gravità nel tuo xml per evitare il ridimensionamento

+1

E se volessi cambiare l'attributo SRC ?, Come cambieresti l'attributo SRC di R.id.bitmap bitmap? – Lobo

+0

in realtà è un processo più lungo per farlo in quel modo dato che non puoi semplicemente aggiornare l'attributo sorgente. l'attributo src in xml è solo una comodità ... in tutti i casi devi decodificare la risorsa in un nuovo oggetto Bitmap e avvolgerla in un Drawable, indipendentemente dal fatto che ciò sia fatto per te dal framework o scrivi tu stesso il codice. dare un'occhiata ai documenti della classe LayerDrawable e BitmapDrawable per vedere quali funzionalità sono disponibili. – Rich