Comment étirer trois images sur l’écran tout en préservant les proportions?

J’ai besoin d’afficher trois images de même taille (200 X 100) côte à côte (pas d’écart) en haut de l’écran. Ils devraient occuper toute la largeur de l’écran et conserver les proportions. Est-il possible d’accomplir cela en utilisant uniquement le fichier XML de présentation, ou dois-je utiliser du code Java?
La solution devrait être indépendante de la résolution … Quelqu’un peut-il poster une solution ou un lien pour ce problème (ou similaire)? Merci!

Ça marche! Mais comme je l’ai dit plus haut, vous devez créer votre propre classe. Mais c’est assez petit. Je l’ai créé à l’aide de la réponse de Bob Lee dans cet article: Android: Comment étirer une image à la largeur de l’écran tout en conservant les proportions?

package com.yourpackage.widgets; import android.content.Context; import android.util.AtsortingbuteSet; import android.widget.ImageView; public class AspectRatioImageView extends ImageView { public AspectRatioImageView(Context context) { super(context); } public AspectRatioImageView(Context context, AtsortingbuteSet attrs) { super(context, attrs); } public AspectRatioImageView(Context context, AtsortingbuteSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = MeasureSpec.getSize(widthMeasureSpec); int height = width * getDrawable().getInsortingnsicHeight() / getDrawable().getInsortingnsicWidth(); setMeasuredDimension(width, height); } } 

Maintenant, pour l’utiliser dans le XML:

  

S’amuser!

=====================================

Vous avez trouvé un autre moyen de faire la même chose que dans XML en utilisant Android: adjustViewBounds = “true”. Voici un exemple:

      

Seule une mise à niveau mineure pour prendre en compte ce qui pourrait se passer mal: null Dessinable ou 0 largeur.

 package com.yourpackage.yourapp; import android.content.Context; import android.graphics.drawable.Drawable; import android.util.AtsortingbuteSet; import android.widget.ImageView; public class AspectRatioImageView extends ImageView { public AspectRatioImageView(Context context) { super(context); } public AspectRatioImageView(Context context, AtsortingbuteSet attrs) { super(context, attrs); } public AspectRatioImageView(Context context, AtsortingbuteSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { Drawable drawable = getDrawable(); if (drawable != null) { int width = MeasureSpec.getSize(widthMeasureSpec); int diw = drawable.getInsortingnsicWidth(); if (diw > 0) { int height = width * drawable.getInsortingnsicHeight() / diw; setMeasuredDimension(width, height); } else super.onMeasure(widthMeasureSpec, heightMeasureSpec); } else super.onMeasure(widthMeasureSpec, heightMeasureSpec); } } 

Jake Wharton améliore la classe AspectRatioImageView, vous pouvez définir dominantMeasurement et aspectRatio via xml. Vous pouvez le trouver dans le lien ci-dessous.

https://gist.github.com/JakeWharton/2856179

Je ne connais pas les dispositions XML et l’API Android, mais le calcul est simple; trouver la largeur de l’écran et diviser par trois. C’est la largeur de chaque image. Maintenant, multipliez la largeur par le rapport hauteur / largeur de l’image d’origine. C’est la hauteur de chaque image.

 int imageWidth = screenWidth / 3; float ratio = originalImage.Height / (float)originalImage.Width; int imageHeight = (int)(imageWidth * ratio);