2011-01-25 24 views
5

Sto tentando di implementare un ImageView con possibile contenere sia immagini orizzontali che verticali. Queste immagini devono adattarsi alla larghezza della vista di immagini (se orizzontale) o all'altezza (se verticale), ma in ogni caso devono essere allineate alla parte superiore della vista senza margine o riempimento.Android ImageView ScaleType * FIT_TOP *

Quello che vorrei ottenere è qualcosa come android:scaleType="fitStart" ma centrato nel caso di immagini ritratto o allineato in alto nel caso di immagini di paesaggio.

Aggiunto:

Ora sto utilizzando un codice così brutta, che sembra funzionare, ma non sono sicuro che è la soluzione migliore:

<com.custom.layout.MyImageView 
     android:id="@+id/detail_view_image" 
     android:src="@drawable/logo" 
     android:background="#fff" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_centerHorizontal="true" 
     android:cropToPadding="false" 
     android:adjustViewBounds="false" 
/> 

e poi nella mia classe, che si estende ImageView i fare:

@Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     int imgWidth = getDrawable().getIntrinsicWidth(); 
     int imgHeight = getDrawable().getIntrinsicHeight(); 

     if(imgWidth>imgHeight) 
      setScaleType(ScaleType.FIT_START); 
     else 
      setScaleType(ScaleType.FIT_CENTER); 

     int width = measureWidth(widthMeasureSpec); 
     int height = measureHeight(heightMeasureSpec);  

     setMeasuredDimension(width, height); 
    } 
+0

Sto cercando di fare qualcosa di simile, hai mai trovato una soluzione per questo? –

+0

finora non ho avuto fortuna, ho finito col usare il codice che ho postato sopra ... – 0m4r

+1

ok, grazie per il codice! –

risposta

2

Invece di vista nativo imperativi si può solo inserire uno snippet in onCreate() che cambia lo scaleType della ImageView secondo l'orientamento del telefono .

Alcuni frammento di esempio (non sono sicuro che funziona proprio così, ma per ottenere l'idea), nel metodo onCreate:

ImageView imgView = findViewById(R.id.myImage); 
//portrairt orientation 
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { 
    imgView.setScaleType(ScaleType.FIT_CENTER); 
} else { //landscape orientation 
    imgView.setScaleType(ScaleType.FIT_START); 
} 

in modo che quando un cambiamento di orientamento che sta accadendo allora onCreate sarà chiamato di nuovo e cambia il tipo di scala della vista e se stai sovrascrivendo onConfigurationChanged() allora dovresti aggiungere lo snippet sopra di nuovo dove vuoi. Provalo e fammi sapere se ha funzionato

+0

Conferma? discussione? – 10s

Problemi correlati