2011-09-29 12 views
14

Ho tre PNG a 9 patch che insieme costituiscono lo sfondo di un pulsante (lato sinistro, centro, lato destro). Vorrei unire queste tre immagini insieme in un disegnabile che posso specificare come sfondo per un pulsante in XML, qualcosa sulla falsariga di:Come posso rendere un drawable da più immagini?

res/drawable/button_background.xml:

<?xml version="1.0" encoding="utf-8"?> 
<nine-patch xmlns:android="http://schemas.android.com/apk/res/android" 
android:src="@drawable/button_left_side" /> 

<nine-patch android:src="@drawable/button_middle" /> 

<nine-patch android:src="@drawable/button_right_side" /> 

res/layout/main.xml:

<button android:background="@drawable/button_background" /> 

È possibile?

risposta

33

Dopo alcuni tentativi ed errori, sono stato in grado di risolvere il problema in modo soddisfacente. Ho semplicemente implementato un drawable Layer-List come segue:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list 
    xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:drawable="@drawable/btn_left" android:left="0px" /> 
    <item android:drawable="@drawable/btn_middle" 
     android:left="26px" android:right="26px" /> 
    <item android:drawable="@drawable/btn_right" android:right="0px" /> 
</layer-list> 

Se i valori 26px sono la larghezza delle due immagini laterali pulsante in pixel.

Per utilizzare questa disegnabile, è sufficiente chiamare come qualsiasi altro drawable:

<bitmap android:src="@drawable/button_background" /> 

Questo funziona esattamente come ci si aspetterebbe a, con la media in espansione come normale in base alla larghezza desiderata, e tutte e tre le immagini espandendo per adattarsi all'altezza desiderata. Spero che altri possano trarne beneficio!

+3

Fornire risultati migliori se si utilizza "dp" anziché "px". L'uso di px comporterà un numero molto piccolo di tasti sinistra e destra nei dispositivi ad alta densità. – seema

Problemi correlati