Question Comment mettre à l'échelle une image dans ImageView pour conserver les proportions


En Android, j'ai défini un ImageViewde layout_width être fill_parent (qui occupe toute la largeur du téléphone).

Si l'image que j'ai mise à ImageView est plus grand que le layout_width, Android va l'échelle, non? Mais qu'en est-il de la hauteur? Lorsque Android redimensionne l'image, conservera-t-il les proportions?

Ce que je découvre, c'est qu'il y a un espace blanc en haut et en bas du ImageView lorsque Android met à l'échelle une image qui est plus grande que la ImageView. Est-ce vrai? Si oui, comment puis-je éliminer cet espace blanc?


433
2018-03-26 08:41


origine


Réponses:


  1. Oui, par défaut, Android adaptera votre image à la taille de l'image, en conservant les proportions. Cependant, assurez-vous que vous définissez l'image sur ImageView en utilisant android:src="..." plutôt que android:background="...". src= le fait évoluer le ratio d'aspect de maintien d'image, mais background= le fait évoluer et déformer l'image pour la faire correspondre exactement à la taille de l'ImageView. (Vous pouvez utiliser un arrière-plan et une source en même temps, ce qui peut être utile pour afficher des images autour de l'image principale, en utilisant une seule image.)

  2. Vous devriez aussi voir android:adjustViewBounds pour que l'ImageView se redimensionne pour s'adapter à l'image redimensionnée. Par exemple, si vous avez une image rectangulaire dans ce qui serait normalement un ImageView carré, adjustViewBounds = true lui permettra également de redimensionner ImageView pour qu'il soit rectangulaire. Cela affecte ensuite la façon dont les autres vues sont disposées autour de ImageView.

    Ensuite, comme Samuh l’a écrit, vous pouvez changer la façon dont les images par défaut sont android:scaleType paramètre. À propos, le moyen le plus simple de découvrir comment cela fonctionne aurait été de faire un peu d'expérience soi-même! N'oubliez pas de regarder les mises en page dans l'émulateur lui-même (ou un téléphone réel) car l'aperçu dans Eclipse est généralement faux.


677
2018-03-26 15:07



Voir android:adjustViewBounds.

Définissez cette option sur true si vous souhaitez que ImageView ajuste ses limites pour conserver le format de son dessin.


247
2017-07-08 12:08



Pour quelqu'un d'autre ayant ce problème particulier. Tu as un ImageView (ou autre View) que vous voulez avoir une largeur de fill_parent et une hauteur mise à l'échelle proportionnellement:

Ajoutez ces deux attributs à votre ImageView:

android:adjustViewBounds="true"
android:scaleType="centerCrop"

Et mettre le ImageView largeur à fill_parent et hauteur à wrap_content.

De plus, si vous ne voulez pas que votre image soit rognée, essayez ceci:

 android:adjustViewBounds="true"
 android:layout_centerInParent="true"

144
2018-05-26 18:45



Si vous voulez un ImageView Si vous augmentez ou diminuez le rapport hauteur / largeur, ajoutez-le à votre XML:

android:adjustViewBounds="true"
android:scaleType="fitCenter"

Ajoutez ceci à votre code:

// We need to adjust the height if the width of the bitmap is
// smaller than the view width, otherwise the image will be boxed.
final double viewWidthToBitmapWidthRatio = (double)image.getWidth() / (double)bitmap.getWidth();
image.getLayoutParams().height = (int) (bitmap.getHeight() * viewWidthToBitmapWidthRatio);

Cela m'a pris un certain temps pour que cela fonctionne, mais cela semble fonctionner dans les cas où l'image est plus petite que la largeur de l'écran et plus grande que la largeur de l'écran, et elle ne coïncide pas avec l'image.


46
2018-03-18 18:39



En dessous du code Travailler pour l'image d'échelle en tant que rapport d'aspect:

Bitmap bitmapImage = BitmapFactory.decodeFile("Your path");
int nh = (int) ( bitmapImage.getHeight() * (512.0 / bitmapImage.getWidth()) );
Bitmap scaled = Bitmap.createScaledBitmap(bitmapImage, 512, nh, true);
your_imageview.setImageBitmap(scaled);

9
2017-09-12 12:23



Cela a fonctionné pour moi:

android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxWidth="39dip"
android:scaleType="centerCrop"
android:adjustViewBounds ="true"

9
2018-03-28 10:31



Jeter un coup d'œil à ImageView.ScaleType pour contrôler et comprendre la façon dont le redimensionnement se produit dans un ImageView. Lorsque l'image est redimensionnée (tout en conservant ses proportions), il est probable que la hauteur ou la largeur de l'image soit inférieure à ImageViewLes dimensions


7
2018-03-26 09:09



cela a résolu mon problème

android:adjustViewBounds="true"
android:scaleType="fitXY"

7
2018-04-24 11:30