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?


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"

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.


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);

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"/>

7

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


2

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


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.


-11

Essayer d'utiliser:

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

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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.