ImageView en ListView que amplía el ancho máximo
Tengo un ListView
cuyos elementos son ImageView
s, por el bien de la discusión. Quiero que la imagen a escala a la anchura de las filas de ListView
, y mantener su relación de aspecto. Aquí está una versión simplificada de la disposición del artículo de ListView
,
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:padding="4dp" > <FrameLayout android:id="@+id/page_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="visible" > <ImageView android:id="@+id/image" android:layout_width="match_parent" android:layout_height="wrap_content" android:adjustViewBounds="true" android:scaleType="fitCenter" android:src="@drawable/some_image" /> </FrameLayout> </FrameLayout> </LinearLayout>
El ancho de ImageView
es match_parent
, y todos sus ancestros son iguales. El diseñador de diseño muestra que las dimensiones de ImageView
abarcan todo el ancho, pero la imagen no lo hace.
- Cómo crear imageview con zoom y pan funcionalidad?
- Saltar ImageView mientras arrastra. Los valores de getX () y getY () saltan
- Cómo obtener el tamaño del mapa de bits después de mostrarlo en ImageView
- Cómo reemplazar R.drawable. "SomeString"
- Cuando haga clic en un botón, gire la imagen en sentido horario en android
EDIT: la imagen está escalando correctamente. El problema es que la altura de la fila de vista de lista es tal que el ancho no puede escalar al tamaño correcto. Si uso fitXY
, escala el ancho, pero entonces la relación de aspecto es incorrecta.
¿algunas ideas? Gracias.
- Cómo configurar onClicklistener Método de ImageView en Android?
- Pinch Android para Zoom ImageView
- Cómo detener otras imágenes para moverse mientras arrastra una imagen
- Alpha-gradient en Android
- En Android, ¿puedo utilizar la imagen de los elementos de layout xml?
- Android ImageView Zoom con superposición de texto
- Cómo descargar y guardar una imagen en Android
- ¿Cómo preparo imágenes para todas las resoluciones de Android?
Respondiendo mi propia pregunta
No pude encontrar ninguna forma de lograr esto sin crear una vista personalizada. En pocas palabras, la vista personalizada establece sus propias dimensiones a las dimensiones reales (no escaladas) del dibujable detrás de él.
public class ResizableImageView extends ImageView { public static interface OnSizeChangedListener { void onSizeChanged(int width, int height); } private OnSizeChangedListener onSizeChangedListener = null; public ResizableImageView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = MeasureSpec.getSize(widthMeasureSpec); int height = width * getDrawable().getIntrinsicHeight() / getDrawable().getIntrinsicWidth(); setMeasuredDimension(width, height); if (onSizeChangedListener != null) { onSizeChangedListener.onSizeChanged(width, height); } } public void setOnSizeChangedListener(OnSizeChangedListener listener) { this.onSizeChangedListener = listener; } }
En mi caso, necesitaba obtener el valor redimensionado con el fin de tamaño de las otras vistas, de ahí la interfaz de escucha.
Si lo que quieres es mantener la relación de aspecto, de acuerdo con la Guía de Android API , creo que tienes que cambiar android: scaleType = "fitCenter" para android: scaleType = "centerInside" o tal vez android: scaleType = "centerCrop" como FitCenter no mantiene la relación de aspecto de la imagen.
- Interfaz de usuario personalizada para una notificación de GCM
- Añadir vista personalizada al diseño xml