J'essaie d'adapter une image à l'intérieur d'un ImageButton
pour le test, mais la façon dont le ImageButton
se comporte n'est pas comme prévu.
au départ, j'ai fait une image 988x89 pixels PNG et je l'ai placée à l'intérieur d'un ImageButton
, qui est dans un 7 pouces 1024x6 pixels écran émulé. Le ImageButton
is 988dp x 89dp, je sais que le dp n'est pas le même que les pixels, mais pour cette résolution, je m'attendais à ce que l'image se redimensionne raisonnablement pour occuper la plupart des ImageButton
. J'ai également changé pour px au lieu de dp pour les tests et cela n'a fait aucune différence.
Mais à la place, le ImageButton
a rendu l'image à l'intérieur TRÈS petite (les lignes bleues sont les limites du ImageButton
et la ligne verte est une indication d'alignement central).
donc question # 1: Pourquoi le ImageButton
fait-il une image aussi grande que celle-ci si petite, alors qu'elle pourrait remplir la majeure partie de l'écran, même avec la taille ImageButton
étant très large ?
Donc, pour surmonter cela, j'ai sélectionné adjustViewBounds
ce qui n'a fait aucune différence, ce qui amène la question n ° 2: Pourquoi? Le réglage de la vue n'est-il pas censé le faire?
Jusqu'à présent, le code est:
<ImageButton
Android:layout_width="988dp"
Android:layout_height="89dp"
Android:id="@+id/ibTest"
Android:src="@drawable/image_top_test"
Android:layout_centerHorizontal="true"
Android:adjustViewBounds="true"
Android:cropToPadding="false"
Android:layout_below="@+id/hlTopBar"
Android:background="#00000000" />
Alors plus tard, j'ai changé scaleType
en fitCenter
et l'image est devenue:
Ce qui est bizarre pour moi aussi, car le ImageButton
a le même rapport d'aspect que l'image, donc je m'attendrais à ce qu'il tienne à 100%, mais il ne convient pas (il y a un écart dans la largeur des deux côtés de l'image).
Alors plus tard, j'ai changé scaleType
en fitXY
et j'ai obtenu mon résultat final:
Ce qui semble être l'image attendue après tout (comparer l'image de fitXY
à l'image de fitCenter
dans Photoshop montre que l'image fitCenter
est légèrement ovale, mais elle peut ' t être affiché ici, ce qui est attendu car la largeur ne correspond pas à l'image comme le fait la hauteur).
Donc ma question générale est (# 3): Quelle est la bonne façon d'ajuster une image dans Android, et de s'attendre à ce qu'elle ait sa taille normale à l'écran, et pourquoi la mise à l'échelle est-elle si désordonnée et je le fais mal?
Je sais qu'il y a des problèmes de tailles d'écran et de dp et etc., mais la mise à l'échelle ne se comporte pas de manière contrôlée, fitCenter
rend l'image ovale et fitXY
dépend trop de moi pour définir la bon rapport d'image sur XY, donc je me demande si je fais quelque chose de mal et comment c'est censé être la bonne façon.
Code XML final:
<ImageButton
Android:layout_width="988dp"
Android:layout_height="89dp"
Android:id="@+id/ibTest"
Android:src="@drawable/image_top_test"
Android:layout_centerHorizontal="true"
Android:adjustViewBounds="true"
Android:cropToPadding="false"
Android:layout_below="@+id/hlTopBar"
Android:background="#00000000"
Android:scaleType="fitXY" />
C'est un bon essai, vous essayez d'aller plus loin dans les implémentations Android.
Rép # 3:
Au début, fournir une taille exacte comme hauteur et largeur n'est pas une bonne pratique dans Android. Si vous souhaitez savoir pourquoi, la raison serait simplement qu'il essaiera de compresser/agrandir l'image à la taille spécifiée par vous dans les paramètres de hauteur et de largeur. Toujours wrap_content
est le paramètre préféré pour que le système d'exploitation s'ajuste automatiquement en fonction de la taille de l'écran. Par conséquent, vous devez le modifier comme suit:
<ImageButton
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:id="@+id/ibTest"
Android:src="@drawable/image_top_test"
Android:layout_centerHorizontal="true"
Android:adjustViewBounds="true"
Android:cropToPadding="false"
Android:layout_below="@+id/hlTopBar"
Android:background="#00000000"
Android:scaleType="fitXY" />
Rép # 1:
Pourquoi l'ImageButton rend-il une image aussi grande que celle-ci si petite, alors qu'elle pourrait remplir la majeure partie de l'écran, même si la taille de l'ImageButton est très large?
La réponse est similaire à celle mentionnée ci-dessus. La taille de votre image sera bien inférieure à celle du système d'exploitation Android calculé en fonction de la taille mentionnée, en tenant compte de la résolution de l'appareil. Utilisez le http://coh.io/adpi/ (ou http://density.brdrck.me/ ) site pour le rendre simple à calculer. Toujours prendre le mdpi comme standard ou base. Supposons que la taille de votre image soit 988X89 en mdpi, il sera:
Maintenant, c'est comme si vous essayez d'afficher une image de 988px X 89px sur un écran xhdpi où le Android Os a calculé la taille de l'image comme 1976px X 178px, ce qui est beaucoup plus grand que votre donnée) taille d'image de 988 pixels X 89 pixels. C'est pourquoi vous obtenez une petite image avec la plupart des zones blanches.
Comment le corriger? Parcourez les spécifications Android pour prendre en charge des écrans de densités différentes. Cela vous oblige à concevoir des images spécifiquement pour hdpi, mdpi, xhdpi et placez-les dans les dossiers appropriés de:
MyProject/
res/
drawable-xhdpi/
awesomeimage.png
drawable-hdpi/
awesomeimage.png
drawable-mdpi/
awesomeimage.png
drawable-ldpi/
awesomeimage.png
Ref: http://developer.Android.com/training/multiscreen/screendensities.html pour plus de détails
Sur l'activité Creat..vous pouvez obtenir la résolution de l'écran ... et redimensionner l'image en fonction de la largeur et de la hauteur de l'écran..et définir l'image .. De cette façon, votre ratio sera le même sur tous les types d'appareils ..
pour redimensionner les images ..: 1. Obtenez la largeur et la hauteur de l'écran 2. redimensionnez l'image selon la résolution de l'écran 3. définissez l'image sur la vue