studio relacion redimensionar pixeles online imagenes filmora convertir como cambiar aspecto android-layout android-imageview

android layout - relacion - ¿Cómo estirar tres imágenes en la pantalla conservando la relación de aspecto?



redimensionar imagenes android studio (4)

Necesito mostrar tres imágenes del mismo tamaño (200 X 100) una al lado de la otra (sin espacios) en la parte superior de la pantalla. Deben ocupar todo el ancho de la pantalla y conservar la relación de aspecto. ¿Es posible lograr eso usando solo el archivo xml de diseño, o necesito usar el código de Java?
La solución debe ser independiente de la resolución ... ¿Alguien puede publicar una solución o un enlace para este problema (o similar)? ¡Gracias!



Lo tengo trabajando! Pero como dije antes, necesitas crear tu propia clase. Pero es bastante pequeño. Lo creé con la ayuda de la respuesta de Bob Lee en esta publicación: Android: ¿Cómo estirar una imagen al ancho de la pantalla mientras se mantiene la relación de aspecto?

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

Ahora para usarlo en el XML:

<com.yourpackage.widgets.AspectRatioImageView android:id="@+id/image" android:src="@drawable/yourdrawable" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:adjustViewBounds="true" />

¡Que te diviertas!

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

Encontré otra forma de hacer lo mismo solo en XML usando android: adjustViewBounds = "true". Aquí un ejemplo:

<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <ImageView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:adjustViewBounds="true" android:src="@drawable/image1" /> <ImageView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:adjustViewBounds="true" android:src="@drawable/image2" /> <ImageView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:adjustViewBounds="true" android:src="@drawable/image2" /> </LinearLayout>


No sé sobre los diseños XML y la API de Android, pero la matemática es simple; encuentra el ancho de la pantalla y divídelo por tres. Ese es el ancho de cada imagen. Ahora multiplica el ancho por la relación de la imagen original de Alto a Ancho. Esa es la altura de cada imagen.

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


Solo una pequeña mejora para tener en cuenta lo que podría ir mal: nulo Drawable o 0 width.

package com.yourpackage.yourapp; import android.content.Context; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.widget.ImageView; public class AspectRatioImageView extends ImageView { public AspectRatioImageView(Context context) { super(context); } public AspectRatioImageView(Context context, AttributeSet attrs) { super(context, attrs); } public AspectRatioImageView(Context context, AttributeSet 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.getIntrinsicWidth(); if (diw > 0) { int height = width * drawable.getIntrinsicHeight() / diw; setMeasuredDimension(width, height); } else super.onMeasure(widthMeasureSpec, heightMeasureSpec); } else super.onMeasure(widthMeasureSpec, heightMeasureSpec); } }