Configuración de Android ImageView Bitmap FitXY no funciona
He estado intentando por mucho tiempo para establecer el mapa de bits para que se ajuste a los límites ImageView
.
Simplemente no funciona a través de scaleType: fitXY
. Mi tamaño de imágenes de mapa de bits son más bajos que los de ImageView
(guardados en 100 x 100 píxeles), quiero que mis imágenes de mapa de bits encajen y se extiendan en ImageView
.
- Establecer la imagen del url a la vista de la imagen
- Cambiar la fuente de ImageView
- Problemas con la recolección de basura y Picasso
- Android: cargar archivo svg desde la web y mostrarlo en la vista de imagen
- Cargar imágenes en ImageView en Android
He aquí un código:
<ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/imageView" android:layout_height="match_parent" android:layout_width="match_parent" android:src="@drawable/locked_image" android:scaleType="fitXY" />
Aquí está el código de configuración de ImageView
(estoy configurando el scaleType
en diferentes lugares para probar):
@Override public View getView(int position, View convertView, ViewGroup parent) { final ImageView imageView; if (convertView == null) { imageView = (ImageView) getLayoutInflater().inflate(R.layout.item_grid_image, parent, false); imageView.setScaleType(ScaleType.FIT_XY); } else { imageView = (ImageView) convertView; imageView.setScaleType(ScaleType.FIT_XY); } imageLoader.displayImage(imagesIds[position], imageView, options); imageView.setScaleType(ScaleType.FIT_XY); return imageView; }
Así es como se ve:
Como se puede ver, la altura del ImageView
está bien, pero quiero que el ancho de la misma sea el mismo. No tengo acceso a mi imagen de mapa de bits a través de mi actividad, así que por favor no me pida que cambie el tamaño de mi mapa de bits. Realmente no entiendo por qué simplemente no funciona como debería.
EDITAR:
Sólo para hacer el problema más comprensible. La altura de ImageView
se calcula para cada dispositivo. Es diferente para cada dispositivo. Quiero que el ancho de mi ImageView
sea igual que la altura como es. Estoy usando la biblioteca de Two-WayGridView
para mostrar las imágenes si hace cualquier diferencia.
- Cómo configurar el oyente de onclick para ver imágenes animadas
- Imagen de diapositiva suave de una sola manera
- Cómo poner 50% de ancho
- Android - Vista de imagen en el centro en toda la resolución de la pantalla
- Galería de imágenes con ViewPager + zoom en ImageViews
- Android translate ImageView sobre SurfaceView
- Hacer fondo transparente de los iconos de Android en eclipse
- Android: establece el filtro de escala de grises a imageView
El uso de scaleType
no cambiará el tamaño de su ImageView, como usted piensa que debería hacerlo. Todo lo que hace es escalar el mapa de bits hasta el tamaño del ImageView (lo que está haciendo bastante bien, a juzgar por su captura de pantalla).
Si quieres hacer cuadrados ImageViews, deberías intentar mirar esta pregunta .
Además, no estoy seguro de entender por qué está utilizando la biblioteca TwoWayGridView . Está diseñado específicamente para permitirle indicar el número de filas / columnas y estirará los elementos para que se ajusten. Esto parece ser exactamente lo contrario de lo que quieres, ya que quieres que sean cuadrados. Un GridView normal funcionará, siempre que anule la onMeasure()
de cada elemento como muestra en la pregunta / respuesta vinculada.
Me pregunto qué contenedor widget que utiliza para la celebración de ImageView.
Por ejemplo … GridView, ListView, etc …
Si utiliza GridView, intenta establecer el recuento de columna por GridView.setNumColumns ().
Si todavía no funciona, intenta utilizar AspectRatioFrameLayout clase por una de muchas formas.
Esta clase es simple. Siga los pasos a continuación.
1. añadir atributos en res / attrs.xml
<declare-styleable name="AspectRatioFrameLayout"> <attr name="aspectRatio" format="float" /> </declare-styleable>
2. crear la clase AspectRatioFrameLayout
public class AspectRatioFrameLayout extends FrameLayout { private static final String TAG = "AspectRatioFrameLayout"; private static final boolean DEBUG = false; private float mAspectRatio; // width/height ratio public AspectRatioFrameLayout(Context context) { super(context); } public AspectRatioFrameLayout(Context context, AttributeSet attrs) { super(context, attrs); initAttributes(context, attrs); } public AspectRatioFrameLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initAttributes(context, attrs); } private void initAttributes(Context context, AttributeSet attrs) { TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.AspectRatioFrameLayout); mAspectRatio = typedArray.getFloat(R.styleable.AspectRatioFrameLayout_aspectRatio, 1.0f); typedArray.recycle(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int widthMode = MeasureSpec.getMode(widthMeasureSpec); int widthSize = MeasureSpec.getSize(widthMeasureSpec); int heightMode = MeasureSpec.getMode(heightMeasureSpec); int heightSize = MeasureSpec.getSize(heightMeasureSpec); if (DEBUG) Log.d(TAG, "widthMode:"+widthMode+", heightMode:"+heightMode); if (DEBUG) Log.d(TAG, "widthSize:"+widthSize+", heightSize:"+heightSize); if ( widthMode == MeasureSpec.EXACTLY && heightMode == MeasureSpec.EXACTLY ) { // do nothing } else if ( widthMode == MeasureSpec.EXACTLY ) { heightMeasureSpec = MeasureSpec.makeMeasureSpec((int)(widthSize / mAspectRatio), MeasureSpec.EXACTLY); } else if ( heightMode == MeasureSpec.EXACTLY ) { widthMeasureSpec = MeasureSpec.makeMeasureSpec((int)(heightSize * mAspectRatio), MeasureSpec.EXACTLY); } else { // do nothing } super.onMeasure(widthMeasureSpec, heightMeasureSpec); } }
3. modifique list_item_image.xml
<your.package.AspectRatioFrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_height="match_parent" android:layout_width="match_parent" app:aspectRatio="1"> <ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/imageView" android:layout_height="match_parent" android:layout_width="match_parent" android:src="@drawable/locked_image" android:scaleType="fitXY" /> </your.package.AspectRatioFrameLayout>
En lugar de utilizar la propiedad src, use la propiedad de fondo de imageView. El mapa de bits se extenderá.
<ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/imageView" android:layout_height="match_parent" android:layout_width="match_parent" android:background="@drawable/locked_image" android:scaleType="fitXY" />
Utilice el fondo con fitxy en lugar de usar src. Estirará su imagen:
android:background="@drawable/locked_image" android:scaleType="fitXY"