Comment adapter une image de taille aléatoire à un ImageView
?
Quand:
- Les
ImageView
dimensions initiales sont 250dp * 250dp - La plus grande dimension de l'image doit être augmentée / réduite à 250dp
- L'image doit conserver ses proportions
- Les
ImageView
dimensions doivent correspondre aux dimensions de l'image mise à l'échelle après la mise à l'échelle
Par exemple, pour une image de 100 * 150, l'image et le ImageView
doivent être 166 * 250.
Par exemple, pour une image de 150 * 100, l'image et le ImageView
doivent être 250 * 166.
Si je fixe les limites comme
<ImageView
android:id="@+id/picture"
android:layout_width="250dp"
android:layout_height="250dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:adjustViewBounds="true" />
les images s'intègrent correctement dans le ImageView
, mais le ImageView
est toujours 250dp * 250dp.
ImageView
l'image? Par exemple, une image de 100dp x 150dp serait mise à l'échelleImageView
aux mêmes mesures? Ou voulez-vous dire comment redimensionner l'image auxImageView
limites. Par exemple, une image de 1000dp x 875dp serait mise à l'échelle en 250dp x 250dp. Avez-vous besoin de conserver les proportions?Réponses:
(La réponse a été fortement modifiée après des clarifications à la question initiale)
Après clarifications:
cela ne peut pas être fait uniquement en XML . Il n'est pas possible de mettre à l'échelle à la fois l'image et le
ImageView
pour que la dimension unique de l'image soit toujours 250dp et que leImageView
ait les mêmes dimensions que l'image.Ce code met à l'échelle
Drawable
unImageView
pour rester dans un carré comme 250dp x 250dp avec une dimension exactement 250dp et en conservant le rapport hauteur / largeur. Ensuite, leImageView
est redimensionné pour correspondre aux dimensions de l'image mise à l'échelle. Le code est utilisé dans une activité. Je l'ai testé via le gestionnaire de clic de bouton.Prendre plaisir. :)
Le code xml pour
ImageView
:Merci à cette discussion pour le code de mise à l'échelle:
http://www.anddev.org/resize_and_rotate_image_-_example-t621.html
MISE À JOUR 7 novembre 2012:
Ajout de la vérification du pointeur nul comme suggéré dans les commentaires
la source
ImageView
, pas les deux.Peut ne pas être une réponse à cette question spécifique, mais si quelqu'un, comme moi, cherche une réponse sur la façon d'ajuster l'image dans ImageView avec une taille limitée (par exemple,
maxWidth
) tout en préservant le rapport hauteur / largeur, puis en se débarrassant de l'espace excessif occupé par ImageView, alors la solution la plus simple consiste à utiliser les propriétés suivantes en XML:la source
la source
Le code ci-dessous rend le bitmap parfaitement avec la même taille de l'image vue. Obtenez la hauteur et la largeur de l'image bitmap, puis calculez la nouvelle hauteur et la largeur à l'aide des paramètres d'imageview. Cela vous donne l'image requise avec le meilleur rapport hauteur / largeur.
prendre plaisir.
la source
essayez d'ajouter
android:scaleType="fitXY"
à votreImageView
.la source
fitXY
changera presque toujours le rapport hauteur / largeur de l'image. OP mentionne clairement que le rapport hauteur / largeur DOIT être conservé.Après avoir cherché un jour, je pense que c'est la solution la plus simple:
la source
adjustViewBounds
à XMLLa meilleure solution qui fonctionne dans la plupart des cas est
Voici un exemple:
la source
tout cela peut être fait en utilisant XML ... les autres méthodes semblent assez compliquées. Quoi qu'il en soit, vous réglez simplement la hauteur à ce que vous voulez dans dp, puis définissez la largeur pour envelopper le contenu ou vice versa. Utilisez scaleType fitCenter pour ajuster la taille de l'image.
la source
Utilisez ce code:
la source
Modifié Jarno Argillanders réponse:
Comment adapter l' image avec votre Largeur et Hauteur:
1) Initialiser ImageView et ensemble Image:
2) Redimensionnez maintenant:
scaleImage
Méthode modifiée : ( vous pouvez remplacer les valeurs de délimitation EXPECTED )Et .xml:
la source
Cela l'a fait pour mon cas.
la source
si cela ne fonctionne pas pour vous, remplacez android: background par android: src
android: src jouera le truc majeur
ça marche bien comme un charme
la source
J'avais besoin d'un ImageView et d'un Bitmap, donc le Bitmap est mis à l'échelle à la taille ImageView, et la taille de ImageView est la même que celle du Bitmap mis à l'échelle :).
Je cherchais à travers cet article pour savoir comment le faire, et j'ai finalement fait ce que je voulais, pas la manière décrite ici.
puis dans la méthode onCreateView
puis code layoutImageView ()
Et le résultat est que l'image s'intègre parfaitement à l'intérieur, en conservant le rapport hauteur / largeur, et n'a pas de pixels restants supplémentaires d'ImageView lorsque le Bitmap est à l'intérieur.
Résultat
Il est important que ImageView ait wrap_content et AdjustViewBounds sur true, puis setMaxWidth et setMaxHeight fonctionneront, ceci est écrit dans le code source de ImageView,
la source
J'avais besoin de faire cela dans une mise en page de contraintes avec Picasso, alors j'ai mélangé certaines des réponses ci-dessus et j'ai trouvé cette solution (je connais déjà le rapport hauteur / largeur de l'image que je charge, ce qui aide):
Appelé dans mon code d'activité quelque part après setContentView (...)
Dans mon XML
Notez l'absence d'attribut constraintBottom_toBottomOf. ImageLoader est ma propre classe statique pour les méthodes et les constantes utilitaires de chargement d'images.
la source
J'utilise une solution très simple. Voici mon code:
Mes images sont ajoutées dynamiquement dans une grille. Lorsque vous effectuez ces réglages pour la vue d'image, l'image peut être automatiquement affichée dans un rapport 1: 1.
la source
Utilisez des mathématiques simples pour redimensionner l'image. soit vous pouvez redimensionner,
ImageView
soit redimensionner l'image dessinable que définie surImageView
. recherchez la largeur et la hauteur de votre bitmap que vous souhaitez définirImageView
et appelez la méthode souhaitée. supposons que votre largeur 500 soit supérieure à la hauteur de la méthode d'appelVous utilisez cette classe pour redimensionner le bitmap.
le code xml est
la source
Réponse rapide:
la source