2010-03-09 16 views
9

Come posso impedire che la mia bitmap venga ridimensionata automaticamente in un ImageView o ImageButton se la vista o il pulsante viene allungato utilizzando "fill_parent" o utilizzando "peso"?Android: come impedire che l'immagine venga ridimensionata in ImageView o ImageButton?

Questo sarà utile, ad esempio, per creare una barra degli strumenti a 4 pulsanti nella parte superiore dello schermo in cui i pulsanti sono equidistanti, ma le immagini all'interno dei pulsanti continuano a essere allungate anche se uso scaleType = "center" , che dovrebbe impedire il ridimensionamento in base al documento, ma non lo fa.

Qualsiasi intuizione è apprezzata!

Grazie,

risposta

10

Ho scoperto che quando si utilizza Android: lo sfondo ridimensiona automaticamente l'immagine che si sta utilizzando lì per le dimensioni della vista.

Ho provato a utilizzare l'androide: src per mettere l'immagine nella vista. L'immagine non è stata ridimensionata, ma non è stato possibile ottenere l'immagine al centro rispetto alla dimensione della vista.

Così ho provato a fare tutto il pulsante di essa la propria disposizione relativa e questo è quello che ho usato:

<RelativeLayout android:id="@+id/RelativeLayout01" 
       android:layout_height="fill_parent" 
       android:layout_width="fill_parent"> 
       <ImageButton android:id="@+id/ImageButton01"  
          android:layout_height="fill_parent" 
          android:layout_width="fill_parent"></ImageButton> 
       <ImageView android:id="@+id/ImageView01" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:background="@drawable/cardback1" 
          android:layout_centerInParent="true"></ImageView> 
</RelativeLayout> 

L'ImageButton è in background e sarà sempre la stessa dimensione del layout. Tuttavia, ImageView rimane sempre centrato nel RelativeLayout e non verrà ridimensionato. In questo modo il RelativeLayout stesso può crescere e muoversi e l'immagine in cima al pulsante rimarrà sempre della stessa dimensione, ma il pulsante aumenterà. L'immagine tuttavia si restringerà se il layout diventa più piccolo dell'immagine stessa.

Penso che sia quello che stavi cercando. Potrebbe esserci un modo migliore per farlo, ma questo è tutto ciò che posso inventare adesso.

+17

Non c'è bisogno di fare questo, basta non usare Android: background. Usa android: src invece (ImageView) o Android: drawableLeft/Right/Bottom/Top (Button o ImageView), o android: button (ImageButton). –

+0

@Romain: non è possibile utilizzare un drawable a 9 patch come sfondo del pulsante in cui contrassegniamo la porzione di icona del nostro pulsante come non estensibile e tutto lo spazio extra attorno (il padding attorno all'icona) come estensibile? In modo che quando lo sfondo viene ridimensionato, viene allungata solo la porzione extra? – Samuh

+1

Grazie Matt e Romain, l'androide: src era esattamente quello che stavo cercando.Questo ha fatto il trucco :-) – user277827

2

Se l'immagine viene scalata, assicurarsi che non si esegue la vostra applicazione in modalità di compatibilità (per esempio se si target Android 1.5/1.6 senza sostenere densità multiple e si esegue l'applicazione su Android 2.0.)

3

Basta modificare il tuo drawable, applicare uno sfondo trasparente più grande. Dire che il mio drawable in hdpi è 41 * 48 px icon.png. Ho creato una nuova immagine 60 * 60 px con uno sfondo trasparente, copia-incolla il precedente icon.png e salva con lo stesso nome. In questo modo non è necessario toccare i tuoi layout.

Quindi è possibile controllare la zona tasto più grande se si applica un non trasparenteAndroid: Priorità:

<ImageButton android:id="@+id/widget_open" 
android:src="@drawable/icon_widget_arrow_up" 
android:background="#ff777777" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content"></ImageButton> 

Applicare il drawable precedente e di nuovo da Android: src, si dovrebbe vedere chiaramente Area ImageButton.

A proposito, sto eseguendo l'app in modalità compatibilità.

+0

sovrascrittura indesiderata. Non raccomandato – Asthme

Problemi correlati