
Il y a un problème, o bug, ou ils voulaient simplement de le faire, dans l’objet ImageView, programmation en Androïde. Si vous assignez une largeur match_parent à cet objet, et une hauteur wrap_content, dans le cas où le image vous allez enregistrer comme source certains ont dimensions supérieures à la de la ImageView, Il semble y avoir problème certains.
Le problème Il prend naissance lorsque l’image est assignée à l’objet ImageView a une dimensions inférieures à cet objet. Dans ce cas, l’image s’affiche avec les dimensions originales, et ne couvre pas les l’ImageView complètement.
Dans ce cas, autant que jouer avec les différents Options et attributs l’objet ImageView, jamais vous obtenez le résultat que vous souhaitez. Vous pouvez modifier la propriété scaleType, adjustViewBounds, layout_height, layout_width, … et rien, n’aura de succès.
Comment faire une image d’une ImageView redimensionner à la taille de l’objet complètement
Pour Télécharger le but de la image de la ImageView redimensionner à la taille de l’objet sans perdre ses proportions, la solution consiste à créer un nouvelle classe de Java dans notre projet qui étendre la classe ImageView et Difficulté le problème que nous avons.
Pour ce faire, dans votre projet, CREA un nouvelle classe. Nous allons appeler ResizableImageView, et que votre code est comme suit:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | package com.mypackage; import android.content.Context; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.widget.ImageView; public class ResizableImageView extends ImageView { public ResizableImageView(Context context, AttributeSet attrs) { super(context, attrs); } public ResizableImageView(Context context) { super(context); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { Drawable d = getDrawable(); if (d == null) { super.setMeasuredDimension(widthMeasureSpec, heightMeasureSpec); return; } int imageHeight = d.getIntrinsicHeight(); int imageWidth = d.getIntrinsicWidth(); int widthSize = MeasureSpec.getSize(widthMeasureSpec); int heightSize = MeasureSpec.getSize(heightMeasureSpec); float imageRatio = 0.0F; if (imageHeight > 0) { imageRatio = imageWidth / imageHeight; } float sizeRatio = 0.0F; if (heightSize > 0) { sizeRatio = widthSize / heightSize; } int width; int height; if (imageRatio >= sizeRatio) { width = widthSize; height = width * imageHeight / imageWidth; } else { height = heightSize; width = height * imageWidth / imageHeight; } setMeasuredDimension(width, height); } } |
Fois créé e mis en œuvre classe ResizableImageView, Ce que nous faisons maintenant est modifier le XML de la Mise en page Découvre où est la ImageView sur lequel nous voulons faire est de redimensionner l’image.
Supposons que, précédemment pour changer, l’ImageView pour modifier le XML est la suivante:
1 2 3 4 5 6 | <ImageView android:id="@+id/miImagen" android:layout_width="match_parent" android:layout_height="wrap_content" android:src="https://cdn1.professor-falken.com/@drawable/imagen" /> |
Eh bien, suffit de changer la classe de cet objet pour la Nouveau classe créée, de la manière suivante:
1 2 3 4 5 6 | <com.mypackage.ResizableImageView android:id="@+id/miImagen" android:layout_width="match_parent" android:layout_height="wrap_content" android:src="https://cdn1.professor-falken.com/@drawable/imagen" /> |
Avec ce classe et le changement dans la Code XML, Nous réaliserons l’image contenue dans l’objet ImageView redimensionnera, maintenir sa proportionnalité, même dans les cas en image à une dimension plus petite que le conteneur.
