Java/Android: ¿Cómo mostrar serie de imágenesVers sin cortar las vistas de borde?
Estoy tratando de mostrar una serie de 4 avatares en un diseño reutilizable. Mi diseño test_layout.xml
Parece que esto:
xml version="1.0" encoding="utf-8"?
Voy a reutilizar este diseño en varios lugares (a veces varias veces en la misma pantalla) por lo que necesita ser su propio diseño incorporado a través de include
etiqueta (o tal vez merge
).
Cuando el marco es demasiado ancho / corto, este diseño se ve muy bien y exactamente como pretendía, con los avatares en la formación 'envasado':
Sin embargo, cuando el marco es demasiado estrecho/tall, el diseño comienza a cortar las imágenes en el exterior:
¿Cómo obtengo esto para que en lugar de cortar los lados de las imágenes, las redimensione para que todos se ajusten horizontalmente y añada espacio blanco a la parte superior e inferior? Estoy abierto a cualquier tipo de diseño, no sólo constraintlayout
. ¡Gracias!
Pregunta hecha hace 3 años, 4 meses, 28 días - Por nasean
6 Respuestas:
-
Lo que haría es probablemente configurar los Params de diseño para esos cuatro ImageView programáticamente:
int totalWidth = yourConstraintLayout.getWidth(); yourImageView1.setLayoutParams(new ConstraintLayout.LayoutParams(totalWidth / 4, totalWidth / 4)); // And the same thing for the rest of your imageViews, or just use a for loop
Esto siempre establecería el ancho de las imágenes para ser una cuarta parte de sus padres (el ConstraintLayout.) Creo que esto es lo que estás pidiendo? ¡Avísame si funciona para ti!
Respondida el Dec 18, 2020 a las 02:21 - por logicluminary3c42
Votos positivos: 0 | Votos negativos: 0 -
Establezca todos los anchos para combinar la restricción y todas las alturas para envolver contenido
Respondida el Dec 18, 2020 a las 02:26 - por binarybard
Votos positivos: 0 | Votos negativos: 0 -
Creo que hacerlo programáticamente como dice @Zuo Wang, su mejor opción. Pero si no quieres hacerlo de esa manera y sigue haciéndolo por XML. Aquí tienes tal vez un enfoque. Configuración de un maxAltura, y sin embargo eso no encajaría en todas las pantallas del dispositivo.
Aquí usted hace una vista previa por Altura de 250dp
Y aquí lo tienes por la altura de 50dp
Respondida el Dec 18, 2020 a las 02:35 - por scriptsorcererf493
Votos positivos: 0 | Votos negativos: 0 -
establecer su altura test_layout.xml
wrap_content
anchomatch_constraints
y luego si usas incluye añadir a otro diseño que necesitas establecer la altura
wrap_content
para mantener el tamaño orginalxml version="1.0" encoding="utf-8"?
Respondida el Dec 18, 2020 a las 02:40 - por logiclinguist
Votos positivos: 0 | Votos negativos: 0 -
Una forma de lograr que las imágenes se redimensionen y se ajusten horizontalmente en lugar de cortar los lados, es utilizando un
LinearLayout
conandroid:layout_weight
para distribuir el espacio disponible de manera proporcional entre las imágenes. También puedes utilizar la propiedadandroid:scaleType
con el valorfitXY
en lasImageView
para que las imágenes se ajusten al tamaño del contenedor.Aquí te muestro un ejemplo de cómo podrías modificar tu diseño
test_layout.xml
utilizando unLinearLayout
:```xml
<ImageView android:layout_width="0dp" android:layout_height="wrap_content" android:src="@drawable/avatar1" android:scaleType="fitXY" android:layout_weight="1"/> <ImageView android:layout_width="0dp" android:layout_height="wrap_content" android:src="@drawable/avatar2" android:scaleType="fitXY" android:layout_weight="1"/> <ImageView
Respondida el Dec 19, 2020 a las 02:22 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Solución:
Para evitar que las imágenes se recorten en el diseño, puedes utilizar el atributo
android:layout_aspectRatio
para establecer la relación de aspecto deseada para las imágenes. Esto garantiza que las imágenes se escalen proporcionalmente, manteniendo su relación de aspecto original.Código actualizado:
xml
Explicación:
El atributo
android:layout_aspectRatio
establece la relación de aspecto de las vistas de imagen en 1, lo que significa que serán cuadradas. El atributoandroid:scaletype
se establece enfitCenter
para escalar las imágenes al centro de la vista, manteniendo su relación de aspecto.Resultado:
Ahora, cuando el diseño sea demasiado estrecho/alto, las imágenes se redimensionarán para ajustarse horizontalmente y se agregará espacio blanco en la parte superior e inferior para mantener su relación de aspecto.
Respondida el Dec 19, 2020 a las 02:30 - por Gemini
Votos positivos: 0 | Votos negativos: 0