Comment redimensionner une Image dans ImageView pour garder le ratio d'aspect
Dans Android, j'ai défini une ImageView
's layout_width
être fill_parent
(qui prend toute la largeur du téléphone).
Si l'image que j'ai mis à ImageView
est plus grande que la layout_width
, Android sera mise à l'échelle à droite? Mais que dire de la hauteur? Quand Android échelle de l'image, cela va garder le ratio d'aspect?
Ce que j'ai trouver est qu'il y a de l'espace blanc en haut et en bas de la ImageView
quand Android échelles une image est plus grande que la ImageView
. Est-ce vrai? Si oui, comment puis-je éliminer l'espace blanc?
Vous devez vous connecter pour publier un commentaire.
Oui, par défaut d'Android à l'échelle de votre image afin de pouvoir l'ImageView, de maintenir le ratio d'aspect. Cependant, assurez-vous de la configuration de l'image de l'ImageView à l'aide de
android:src="..."
plutôt queandroid:background="..."
.src=
rend compte de l'échelle de l'image en maintenant le ratio d'aspect, maisbackground=
rend compte de l'échelle et déformer l'image pour l'adapter exactement à la taille de l'ImageView. (Vous pouvez utiliser un fond et une source dans le même temps, ce qui peut être utile pour des choses comme l'affichage d'un cadre autour de l'image principale, en utilisant seulement une ImageView.)Vous devriez également voir
android:adjustViewBounds
à faire de l'ImageView redimensionner lui-même pour s'adapter à l'échelle de l'image. Par exemple, si vous avez une image rectangulaire, dans ce qui serait normalement un carré ImageView, adjustViewBounds=true fera redimensionner l'ImageView rectangulaire ainsi. Ensuite, cela affecte la façon dont les autres Vues sont disposés autour de l'ImageView.Alors que Samuh écrit, vous pouvez changer la façon dont il les échelles par défaut des images à l'aide de la
android:scaleType
paramètre. Par la manière, la façon la plus simple de découvrir comment cela fonctionne, aurait été tout simplement à s'amuser un peu vous-même! N'oubliez pas de regarder la mise en page de l'émulateur lui-même (ou un téléphone) que la prévisualisation dans Eclipse est généralement faux.setImageBitmap
est le même queandroid:src="..."
etsetBackground...
estandroid:background="..."
android:src="..."
en xml aswell.android:adjustViewBounds
était la dernière pièce de mon puzzle, merci!Voir
android:adjustViewBounds
.À quelqu'un d'autre d'avoir ce problème particulier. Vous avez un
ImageView
(ou d'autresView
) que vous voulez avoir une largeur defill_parent
et une hauteur dans des proportions:Ajouter ces deux attributs à votre
ImageView
:Et définir la
ImageView
largeur defill_parent
et la hauteur dewrap_content
.Aussi, si vous ne voulez pas que votre image sera recadrée, essayez ceci:
View
)". AFAICT aucun point de vue aadjustViewBounds
ouscaleType
attributs.Si vous voulez un
ImageView
que les deux échelles en haut et en bas tout en gardant les proportions sont correctes, ajoutez ceci à votre XML:Ajouter à votre code:
Il m'a fallu un certain temps pour obtenir ce travail, mais cela semble fonctionner dans le cas où l'image est plus petite que la largeur de l'écran et plus grande que la largeur de l'écran, et il n'a pas de zone de l'image.
Cela a fonctionné pour moi:
Ci-dessous le code de Travail pour l'échelle de l'image en tant qu'aspect ratio:
cela a résolu mon problème
Prendre un coup d'oeil à ImageView.ScaleType de contrôler et de comprendre le mode de redimensionnement qui se passe dans un
ImageView
. Lorsque l'image est redimensionnée (tout en maintenant son ratio d'aspect), les chances sont que soit la hauteur de l'image ou la largeur est inférieure àImageView
's dimensions.Utiliser ces propriétés dans ImageView pour garder le ratio d'aspect:
J'ai une image plus petite que l'écran. Pour l'avoir étiré proportionnellement au max et au centre de la vue, j'ai dû utiliser le code suivant:
Avez à l'esprit, cependant, que si vous avez un parent de mise en page et d'avoir quelques éléments pour être au-dessus ou au-dessous de l'ImageView, ils seront probablement recouverte par l'image.
Pour quelqu'un de vous qui veut l'image pour l'adapter exactement la imageview avec une bonne mise à l'échelle et pas de recadrage utilisation
où imageView est le point de vue représentant votre ImageView
Vous pouvez calculer la largeur de l'écran. Et vous pouvez mettre à l'échelle l'image.
calculer la largeur de l'écran et de l'image à l'échelle de la hauteur par la largeur de l'écran.
Après vous pouvez mettre à l'échelle l'image.
Quand vous faites cela, de la programmation, assurez-vous d'appeler les techniciens dans le bon ordre:
Si la qualité de l'image diminue dans:
utilisation
au lieu de
Si vous voulez que votre image occuper le maximum d'espace possible alors la meilleure option serait de
Essayez d'utiliser
android:layout_gravity
pour ImageView:L'exemple ci-dessus a fonctionné pour moi.
J'ai un algorithme à l'échelle d'une image bitmap dans bestFit le conteneur de dimensions, de maintenir son ratio d'aspect. Veuillez trouver ma solution ici
Espère que cela aide quelqu'un en bas de la voie!
Yo n'avez pas besoin de code java. Vous avez juste à :
La clé est dans le match parent pour la largeur et la hauteur
J'utilise ceci:
dans le cas de l'utilisation
cardview
pour l'arrondissementimageview
et fixeandroid:layout_height
pour l'en-tête de cette travaillé pour moi de chargement de l'image avecGlide
Vous pouvez mettre à l'échelle l'image qui permettra également de réduire la taille de votre image.
Il y a une bibliothèque, vous pouvez le télécharger et l'utiliser.
https://github.com/niraj124124/Images-Files-scale-and-compress.git
Comment utiliser
1)Importer le compresseur-v1.0. pot à votre projet.
2)Ajouter ci-dessous un exemple de code à tester.
ResizeLimiter resize = ImageResizer.build();
redimensionner.l'échelle("inputImagePath", "outputImagePath",imageWidth, imageHeight);
Beaucoup plus de méthodes sont là selon votre condition
Passer votre ImageView et basé sur la hauteur de l'écran et la largeur, vous pouvez le faire
C'est la façon dont il a travaillé pour moi à l'intérieur d'un ConstraintLayout:
Ensuite dans le code, j'ai mis le drawable comme:
Cela correspond à l'image joliment en fonction de ses proportions et la maintient dans le centre.