2010-05-04 15 views
16

Ho un ImageView con altezza massima e larghezza massima entrambe impostate su 100. La figura qui sotto non è chiaramente una piazza, ma è possibile utilizzare la vostra immaginazione;)Posizionamento di un'immagine all'interno di ImageView con altezza massima e larghezza massima impostata

Figura 1:

╔══════════════════════════════════════════════╗ 
║ ImageView ╔══════════════╗    ║ 
║    ║    ║    ║ 
║    ║ Actual image ║    ║ 
║    ║    ║    ║ 
║    ║    ║    ║ 
║    ║    ║    ║ 
║    ╚══════════════╝    ║ 
╚══════════════════════════════════════════════╝ 

In ogni caso, se provo a impostare un BitMap al ImageView che non ha un rapporto di 1: 1, l'immagine è posizionata come nella figura 1. Quello che voglio è che l'immagine sia posizionata a sinistra all'interno dello ImageView come mostrato nella Figura 2 di seguito.

Figura 2:

╔══════════════════════════════════════════════╗ 
║══════════════╗        ║ 
║    ║        ║ 
║ Actual image ║        ║ 
║    ║        ║ 
║    ║        ║ 
║    ║        ║ 
║══════════════╝        ║ 
╚══════════════════════════════════════════════╝ 

potete vedere il mio ImageView in XML di seguito. maxHeight, maxWidth e adjustViewBounds vengono impostati durante il runtime.

<ImageView android:id="@+id/someImage" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/textName" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:paddingRight="4dp" 
    /> 

Questo è in un RelativeLayout se fa alcuna differenza.

+8

+1 per fini ASCII art :-) –

risposta

1

Prova

android:gravity="left" 

La gravità è come una vista posiziona il suo contenuto. Funziona su TextView per il testo e probabilmente ImageView per l'immagine.

Edit:

provare a fare una FrameLayout che contiene l'ImageView. Imposta la larghezza e l'altezza di ImageView su "wrap_content" e imposta la gravità del genitore su "sinistra".

Altrimenti, implementa su Disegna in una vista e disegna l'immagine in qualsiasi posizione desideri.

1

io uso:

android:scaleType="fitCenter" 

documentato here. In bocca al lupo!

MODIFICA: Il mio male, non mi rendevo conto che stavi centrando un'immagine in un ImageView (la mia prima lettura pensavo avessi problemi a centrare ImageView all'interno di un'altra vista). Ora io non sono così sicuro, ma si poteva guardare ScaleType comunque^_-

2

Ho affrontato lo stesso problema e questo è come ho risolto:

ho finito per mettere l'ImageView all'interno di un RelativeLayout che è grande come ImageView e impostare la gravità del Relative Layout su ciò che volevo (lasciato nel tuo caso).

Ho anche impostato adjustViewBounds su true in modo che ImageView sia grande quanto l'immagine e sia posizionato all'interno di Relative Layout.

non una soluzione molto elegante ma funziona ...

3

Perché non basta aggiungere una drawableLeft alla vostra vista.

In questo modo (nel layout.xml): android: drawableLeft = "@ drawable/yourDrawableId" -or- come questo (in codice Java): yourView.setCompoundDrawablesWithIntrinsicBounds (yourDrawableId, 0, 0,0);

È possibile controllare il riempimento, ecc. Di questo drawable all'interno del contenitore View (per controllare i ritocchi di layout a grana stretta).

+0

E dove funziona esattamente? Il completamento automatico non mi mostra "drawableLeft". Potete fornire un esempio? –

19

provare questo

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/home_icon" 
    android:scaleType="fitStart"/> 

aiuta solo per me.

1

Qualcosa non va. ImageView è definito con wrap_content per il suo layout_width e layout_height nell'XML, quindi dovrebbe sempre occupare solo lo stesso spazio del bitmap.

provare ad aggiungere un android:background per il vostro ImageView per vedere che è davvero più ampia rispetto la tua bitmap e ha causato la centratura indesiderato:

<ImageView android:id="@+id/someImage" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/textName" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:paddingRight="4dp" 
    android:background="#F00" 
    /> 

test con alcune immagini bitmap che ha colore di sfondo trasparente in modo che possiamo vedere il rosso sfondo da ImageView. Mi aspetto che mostri un rettangolo alto se la tua bitmap di origine è alta e un rettangolo largo se la bitmap è ampia. Vedrai un quadrato solo se la tua bitmap di origine è quadrata. Non dovremmo mai vedere il caso della Figura 1 dalla tua domanda.

Forse volevi che il tuo ImageView avesse sempre una dimensione 100x100 in ogni momento? Quindi è possibile utilizzare il seguente codice (si noti il ​​fitStart per la scaleType attributo come giustamente detto da altri già):

<ImageView android:id="@+id/someImage" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/textName" 
    android:layout_width="100dp" 
    android:layout_height="100dp" 
    android:paddingRight="4dp" 
    android:background="#F00" 
    android:scaleType="fitStart" 
    /> 

Non v'è alcuna necessità di impostare maxHeight, maxWidth e adjustViewBounds dal codice Java, se questo è ciò che si volere.

4

Per impostazione predefinita, scaleType è "fitCenter"/ScaleType.FIT_CENTER come nel primo schizzo.


Per allineare drawable al lasciato del ImageView, come mostrato nel secondo schizzo:

nella vista xml:

<ImageView 
    android:scaleType="fitStart" /> 

o nella classe Java :

ImageView image_view = [create new ImageView or getView from xml]; 
image_view.setScale(ScaleType.FIT_START); 


Per allineare il drawable a destra della ImageView

nella vista XML:

<ImageView 
    android:scaleType="fitEnd" /> 

o nella classe Java:

ImageView image_view = [create new ImageView or getView from xml]; 
image_view.setScale(ScaleType.FIT_END); 
+0

Esattamente la buona risposta per centrare un'immagine all'interno di ImageView, serve più voti! – Pull

Problemi correlati