web-dev-qa-db-fra.com

Comment créer une ImageView qui remplit la hauteur du parent et affiche une image aussi grande que possible?

J'ai une ImageView qui est définie de la manière suivante:

 <ImageView
  Android:id="@+id/cover_view"
  Android:layout_width="wrap_content"
  Android:layout_height="match_parent"
  Android:layout_below="@id/title"
  Android:layout_above="@id/divider"
  Android:adjustViewBounds="true"
  Android:src="@drawable/image_placeholder"
  Android:scaleType="fitStart"/>

Maintenant, après avoir téléchargé un nouveau bitmap, je change le dessinable. L'image apparaît maintenant dans le coin supérieur gauche de l'ImageView. Existe-t-il un moyen pour que l'image remplisse toute la hauteur possible, puis ajuste la largeur de la vue pour permettre la mise à l'échelle de l'image sans modifier le rapport d'aspect?

L'image remplit tout l'espace sur un écran standard mais sur une résolution WVGA, l'image ne prend qu'environ la moitié de la hauteur réelle de l'ImageView.

30
Janusz

Fondamentalement, la réponse ici est qu'il n'y a pas de valeur prédéfinie pour ce que vous essayez d'atteindre. La solution est de créer un Matrix qui correspond à vos besoins et d'appeler setImageMatrix(matrix) sur votre ImageView.

1
mreichelt

Si je vous comprends bien, ce que vous devez utiliser est le centerCrop scaleType. fitStart met l'image à l'échelle proportionnellement, mais ni la largeur ni la hauteur ne dépasseront la taille de la vue, et l'image aura, comme vous l'avez dit, un top|left la gravité.

L'utilisation de centerCrop met l'échelle à l'échelle proportionnellement, mais fait en sorte que le bord le plus court de l'image corresponde à la taille de la vue, et s'il existe des données supplémentaires sur le côté long qui ne correspondent pas, elles sont simplement rognées. La gravité est, bien sûr, center. Ce qui suit a fonctionné pour moi:

<ImageView
        Android:src="@drawable/image_placeholder"
        Android:id="@+id/cover_view"
        Android:layout_width="fill_parent"
        Android:layout_height="fill_parent"
        Android:scaleType="centerCrop"
/>
47
kcoppock

Vous pouvez changer le type d'échelle en fitXY via l'appel à

imageView.setScaleType(ScaleType.FIT_XY);
10
Nikolay Ivanov

faites-le simplement en xml comme

Android:scaleType="fitXY"
4
Atendra Singh