2011-09-01 17 views
14

Ho il seguente set drawable come sfondo:androide, fondo, strato-list e oggetto bitmap scalabile

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

<item> 
    <bitmap android:src="@drawable/base_bg" 
    android:gravity="bottom" /> 
</item> 
<item android:top="10dp" android:left="10dp"> 
    <bitmap android:src="@drawable/decoration1" 
    android:gravity="top|right" 
    android:width="25dp" 
    android:height="25dp" /> 
</item> 
<item android:top="10dp" android:left="10dp"> 
    <bitmap android:src="@drawable/decoration2" 
    android:gravity="top|right" 
    android:width="25dp" 
    android:height="25dp" 
    /> 
</item> 
</layer-list> 

Esso mostra tutte le immagini bitmap (base_bg, decoration1, e decoration2), ma non riesco a trovare un modo per modificare la dimensione di loro. Mi piacerebbe avere lo sfondo principale e sopra di esso le decorazioni che avranno dimensioni diverse in base al dpi. C'è un modo semplice per farlo, o devo effettivamente avere un sacco di "decorazioni" per i diversi dpi? Non è buono e mi piacerebbe avere l'opzione ridimensiona/ridimensiona invece!

Gli attributi android:width e android:height sono qualcosa che mi piacerebbe trovare, ma so che non funziona. Al momento sto usando versioni diverse per DPI diversi, ma spero che potrebbe essere un po 'più user friendly.

+0

Probabilmente dovresti prendere in considerazione un layout del frame: puoi modificare ciascuna vista in modo discreto. – RichieHH

risposta

9

Non so come siano queste immagini, ma, ad esempio, si può fare una grande immagine e usarla in un oggetto Android: campo disegnabile, in questo modo l'immagine prende la dimensione dell'oggetto.

<layer-list 
xmlns:android="http://schemas.android.com/apk/res/android"> 

<item> 
    <bitmap android:src="@drawable/base_bg" 
    android:gravity="bottom" /> 
</item> 
<item android:top="10dp" android:left="10dp" android:drawable="@drawable/decoration1"> 
</item> 
<item android:top="10dp" android:left="10dp" android:drawable="@drawable/decoration2"> 
</item> 
</layer-list> 

Altre soluzioni potrebbero essere quello di fare a livello di codice con LayerDrawable (here) e Drawable (here) classi. È possibile costruire l'oggetto Layer con 3 oggetti disegnabili e quindi scegliere la dimensione corretta su ciascun oggetto Drawable con il metodo setBounds (Rect).

Spero che ti aiuti.

+0

layers [1] .setBounds (4, 4, 4, 4); <- non funziona -.- –