web-dev-qa-db-fra.com

Mettre à l'échelle une image pour remplir toute ImageView en Android

J'aimerais agrandir une image pour prendre toute la taille d'une ImageView. Ceci est subtilement différent de l'utilisation de scaleType=fit_center Car fit_center laissera des bandes autour de l'image si le format d'image ne correspond pas exactement au format d'image d'ImageView. Au lieu de cela, je voudrais que l'image soit centrée et agrandie pour remplir complètement la vue englobante, avec tout excès coupé.

Je peux accomplir cela en calculant ma propre matrice d'image personnalisée pendant onCreate ():

final Display display = getWindowManager().getDefaultDisplay();
final float screenWidth = display.getWidth();
final float screenHeight = display.getHeight();
final float imageWidth = splashView.getDrawable().getIntrinsicWidth();
final float imageHeight = splashView.getDrawable().getIntrinsicHeight();
final Matrix splashMatrix = new Matrix();
final float scale = Math.max(screenHeight/imageHeight,screenWidth/imageWidth);
splashMatrix.postScale( scale, scale );
splashView.setImageMatrix(splashMatrix);

Cela fonctionne bien, mais il semble qu'il doit y avoir un accès plus facile. Quelqu'un connaît-il un moyen de mettre à l'échelle une image dans une ImageView tout en préservant le rapport d'aspect de l'image et en remplissant complètement l'ImageView?

(Remarque: dans mon cas, mon ImageView occupe le plein écran, donc j'utilise getWindowManager().getDisplay() pour trouver la taille d'image souhaitée. Vous ne pouvez pas utiliser splashView.getWidth()/getHeight() car la vue n'a pas encore été présentée et n'a pas de taille)

60
emmby

Vous pouvez utiliser Android:scaleType="centerCrop". Conserve les proportions et redimensionne l'image comme vous le souhaitez.

Pour plus d'informations, veuillez cliquer sur le lien ci-dessous

http://developer.Android.com/reference/Android/widget/ImageView.html#attr_Android:scaleType

150
roplacebo
4
Kumar Bibek

Dans certains cas, tout ce dont vous avez besoin est

Android:adjustViewBounds="true"
2
Barbara K