Android: étirer l'image dans l'image pour l'adapter à l'écran

126

J'ai un imageviewqui a sa hauteur et sa largeur définies fill_parentavec un linearlayoutqui a les mêmes valeurs définies. Je suppose donc que cela devrait adapter mes images à l'écran. Mais cela ne correspond qu'à 80% (marge supérieure et inférieure en mode paysage).

J'ai essayé le code suivant sans succès:

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();
int height = display.getHeight();

imgView.setMinimumWidth(width);
imgView.setMinimumHeight(height);

imgView.setMaxWidth(width);
imgView.setMaxHeight(height);

D'autres idées?

Johan
la source
Bien que ce soit un problème légèrement différent, cette réponse devrait vous aider.
fredley

Réponses:

317

pour changer de manière programmée, utilisez:

imgview.setScaleType(ScaleType.FIT_XY);

OU

pour changer d'utilisation de xml:

 android:scaleType="fitXY"
Pinki
la source
26
Je sais que c'est ce que vous vouliez, mais pour les images où vous vous souciez du rapport hauteur / largeur, cela va s'étirer.
Artem Russakovskii
Fonctionne à merveille pour ImageView dans un ScrollView. Même l'aspect est maintenu correct.
JNissi
10
La même chose peut être définie dans la mise en page xml, android: scaleType = "fitXY"
Sathesh
9
Pour que l'image remplisse toute la zone et conserve un bon rapport hauteur / largeur, utilisezv.setAdjustViewBounds(true); v.setScaleType(ImageView.ScaleType.CENTER_CROP);
Marco Florian
1
Fonctionne comme un charme
dave o grady
119

Donnez dans le fichier xml de votre mise en page android:scaleType="fitXY"
PS: cela s'applique au moment où l'image est définie avec android:src="..."plutôt que android:background="..."lorsque les arrière-plans sont définis par défaut pour s'étirer et s'adapter à la vue.

Sen
la source
la chose d'arrière-plan n'a pas aidé à résoudre le problème pour moi, est-ce que je fais quelque chose de mal? s'il vous plaît jeter un oeil à: stackoverflow.com/questions/14164473/…
Dheeraj Bhaskar
1
Cela ne prend pas en charge le rapport hauteur / largeur si vous codez en dur la largeur des images et que vous voulez que la hauteur soit mise à l'échelle
Akshat Agarwal
Comment puis-je faire en sorte que cela s'adapte à tout l'écran? Je veux que ce soit toujours proportionnel
Ruchir Baronia
+1 pour dire que cela s'applique à android: src = "..." plutôt qu'à android: background = "..." ceci est très important
DragonFire
20

utilisez ceci:

ImageView.setAdjustViewBounds(true);
Lalit Kumar
la source
4
C'est en combinaison avec android:scaleType="fitXY"ce qui a fonctionné. Merci
smac89
@ smac89 Quelle est la différence entre ces combinaisons et l'utilisation de FIT_CENTER? Ne devrait pas utiliser FIT_CENTER?
Jenix
@Jenix, remarquez que cela fait un moment que je n'ai pas touché Android pour la dernière fois, mais je pense que la raison en fitXYest que l'image est étirée proportionnellement pour s'adapter au cadre / à la vue dans laquelle elle a été définie. Utiliser des FIT_CENTERsons similaires à celui-ci ne fera que placer l'image au centre de la vue mais ne remplit pas la vue. Je me trompe peut-être, mais vous pouvez expérimenter l'un ou l'autre pour savoir ce qui fonctionne
smac89
@ smac89 Avant de demander, j'ai déjà testé les deux et cela a fonctionné de la même manière. J'étais curieux de connaître la raison, mais je pense maintenant que vous ne connaissiez pas FIT_CENTER, tout comme le fait que je ne connaissais pas la combinaison que vous m'avez indiquée. :)
Jenix
9

si tu utilises android:scaleType="fitXY" vous devez spécifier

android:layout_width="75dp" et android:layout_height="75dp"

si vous utilisez wrap_content, cela ne correspondra pas à ce dont vous avez besoin

<ImageView
android:layout_width="75dp"
android:layout_height="75dp"
android:id="@+id/listItemNoteImage"
android:src="@drawable/MyImage"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:layout_marginStart="12dp"
android:scaleType="fitXY"/>
Ozear
la source
7

La réponse acceptée est parfaite, mais si vous souhaitez le faire à partir de xml, vous pouvez utiliser android:scaleType="fitXY"

Bibaswann Bandyopadhyay
la source
2

J'ai utilisé ce android:scaleType="fitXY"code dans un fichier Xml.


la source
0

changez simplement la hauteur et la largeur de votre ImageView en wrap_content et utilisez

exampleImage.setScaleType (ImageView.ScaleType.FIT_XY);

dans votre code.

Ankur Yadav
la source
-11

Essayer d'utiliser:

imageview.setFitToScreen(true);
imageview.setScaleType(ScaleType.FIT_CENTER);

Cela adaptera votre image à l'écran avec le bon rapport.

Lincy
la source
12
"imageview.setFitToScreen (vrai);" - Qu'est-ce que c'est? une méthode non documentée?
Malachiasz
J'utilise eclipse et cela ne compile pas:imageview.setFitToScreen(true)
apprenant
5
Il n'y a pas de telle méthode comme celle-ci dans l'Android.
NightFury
Peut-être qu'il voulait dire setFitsSystemWindows()??
ban-geoengineering