2013-05-06 14 views
5

Ho un semplice layout lineare utilizzato per la cella di ListView e ha una visualizzazione di immagini. L'immagine verrà scaricata da internet, quindi le dimensioni possono essere di dimensioni diverse.Come modificare dinamicamente Altezza ImageView

Tuttavia, voglio impostare la larghezza della vista di immagini per essere fill_parent, che è fissa, e modificare dinamicamente l'altezza dell'immagine in fase di esecuzione. Regole per impostare l'altezza dell'immagine: se il rapporto h/w dell'immagine è superiore a 1, rendere quadrato ImageView, significa abbinare l'altezza alla larghezza.

se il rapporto h/w dell'immagine è inferiore a 1, ridimensionarlo in modo proporzionale. Previsti due campioni come sotto.

Il primo è h/w < 1, mentre il secondo 'Cat' è h/w> 1.

enter image description here enter image description here Grazie per il vostro tempo.

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="@color/white" 
    android:orientation="vertical" 
    android:padding="10dp" > 

     <TextView 
     android:id="@+id/postTitle" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:ellipsize="end" 
     android:maxLines="2" 
     android:textColor="@color/black" 
     android:textSize="18sp" 
     android:textStyle="bold" /> 

     <ImageView 
     android:id="@+id/postImg" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="10dp" 
     android:scaleType="centerCrop" 
     android:src="@drawable/dummy_image" 
     android:contentDescription="@string/postImage" /> 
    </LinearLayout> 

risposta

7

Sarà necessario creare una sottoclasse ImageView

Override l'onMeasure, non ho ancora testato questo, ma tutte le variabili necessari ci sono e l'idea è corretta. Devi semplicemente applicare le proporzioni dell'immagine all'altezza delle immagini, e se è maggiore della larghezza, impostala sulla larghezza.

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 
{ 
    Drawable drawable = getDrawable(); 
    if (drawable != null) 
    { 
     //get imageview width 
     int width = MeasureSpec.getSize(widthMeasureSpec); 


     int diw = drawable.getIntrinsicWidth(); 
     int dih = drawable.getIntrinsicHeight(); 
     float ratio = (float)diw/dih; //get image aspect ratio 

     int height = width * ratio; 

     //don't let height exceed width 
     if (height > width){ 
      height = width; 
     } 


     setMeasuredDimension(width, height);  
    } 
    else 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 

} 
+0

Ha funzionato per voi? –

+0

no, non funziona. Grazie comunque –

+0

cosa succede, perché quelle impostazioni scaleranno l'immagine in modo tale che la larghezza sia statica e l'altezza sia tirata rispettando le proporzioni dell'immagine. –

0

Il luogo in cui si sta caricando l'ImageView nel codice dall'URL, è necessario impostare i parametri di layout della ImageView laggiù. Cambierà le dimensioni dell'immagine in modo dinamico.

Dopo aver caricato l'immagine, trovare le dimensioni e calcolare il rapporto e modificare le dimensioni in base alla condizione che si desidera applicare.

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(width,height); 
    imageView.setLayoutParams(layoutParams); 
    //set other properties of the imageview according to your condition 
+0

Ho la dimensione dell'immagine. Quindi il problema, come posso sapere l'altezza da impostare per ImageView? L'ho fatto attraverso displaymetrics.widthPixels meno margini che ho impostato nel layout xml (convertito da dp a px). È questo il modo migliore? Grazie –

Problemi correlati