2017-03-27 2 views
0

J'utilise Picasso pour afficher 2 ImageView côte à côte à l'intérieur d'un GridView de 2 colonnes. La chose est que je ne peux pas trouver un moyen de définir dynamiquement ma hauteur ImageView, sans étirer l'image.Comment régler dynamiquement la hauteur d'ImageView avec Picasso?

Voici le code:

ImageListAdapter.java

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    // ViewHolder pattern in play 
    ViewHolder viewHolder; 
    if (null == convertView) { 
     viewHolder = new ViewHolder(); 
     convertView = inflater.inflate(R.layout.listview_item_image, parent, false); 
     viewHolder.mImageView = (ImageView) convertView.findViewById(R.id.iv_button); 
     convertView.setTag(viewHolder); 
    } else { 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 

    Picasso 
      .with(context) 
      .load(imageResources[position]) 
      .fit() 
      .centerInside() 
      .into(viewHolder.mImageView); 

    return convertView; 
} 

activity_picasso.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:ads="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <GridView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/heenok_grid_view" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:numColumns="2" 
     android:layout_marginBottom="50dp"/> 

</RelativeLayout> 

listview_item_image.xml

<?xml version="1.0" encoding="utf-8"?> 
<ImageView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/iv_button" 
    android:layout_width="match_parent" 
    android:layout_height="121dp" 
    android:background="@null" 
    android:foreground="?attr/selectableItemBackgroundBorderless" /> 

J'ai essayé sans .fit.centerInside() dans mon Adapter et en ajoutant android:layout_height="wrap_content" dans mon ImageView. Cela fonctionne mais en raison d'un grand nombre d'image, j'expérience énormes retards, mes images sont désordonnées et l'application plante juste.

Si je change android:layout_height="" à wrap_content sans supprimer .fit.centerInside(), l'écran est tout simplement vide comme s'il n'y avait pas d'images ...

Si quelqu'un a une réponse, je serais heureux!

+0

Tout d'abord, si vous spécifiez Android: scaleType = "fitXY" sur votre ImageView votre image sera déformée si le ImageView n'a pas le même rapport que votre image. Choisissez un autre scaleType en fonction de l'effet que vous souhaitez obtenir. .fit.centerInside() est inutile si vous utilisez un autre scaleType, il suffit de le supprimer. Veillez également à utiliser un RecyclerView pour utiliser moins de mémoire, sinon vous ferez face à un crash de mémoire avec trop d'images. – DustyMan

Répondre

0

Avez-vous aussi essayé

<?xml version="1.0" encoding="utf-8"?> 
<ImageView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:adjustViewBounds="true" 
    .../> 

Mais vous semblez avoir des problèmes de performance: utilisation RecyclerView à la place (comme DustyMan déjà mentionné) avec un GridLayoutManager