Esta es mi configuración. Tengo un ListView
personalizado con algunos encabezados elegantes, que está dentro de un ViewPager
. Estoy manteniendo un caché de memoria de imágenes que se han descargado y almacenado localmente como lo haría cualquier desarrollador que se precie.Evite onMeasure y onLayout cada vez que se establece Bitmap ImageView
El problema que estoy teniendo es que cada vez que llamo setImageBitmap(Bitmap bm)
en el ImageView
en getView()
método mis ListView
's, usando un mapa de bits de la memoria caché, que está causando todos mis Vistas a onMeasure()
. He mirado a través del código fuente de Android ImageView
y encontré esto:
public void setImageDrawable(Drawable drawable) {
if (mDrawable != drawable) {
mResource = 0;
mUri = null;
int oldWidth = mDrawableWidth;
int oldHeight = mDrawableHeight;
updateDrawable(drawable);
if (oldWidth != mDrawableWidth || oldHeight != mDrawableHeight) {
requestLayout();
}
invalidate();
}
}
Así que puedo ver que setImageDrawable
(que es llamada por setImageBitmap
) Pide a su disposición siempre que el drawable
tiene diferentes dimensiones de su anterior Drawable
. El problema es que mi ImageView
está configurado como estático a 60dp x 60dp, por lo que su tamaño no va a cambiar independientemente del tamaño de su imagen.
¿Hay alguna manera de evitar los diseños constantemente medidos mientras me desplazo? Las llamadas onMeasure
y onLayout
se propagan por el árbol View
, por lo que mis ListView
y ViewPager
también se están midiendo en el medio del desplazamiento de la lista, lo que obviamente está causando problemas graves de rendimiento (~ 100ms UI saltos).
El rendimiento es horrible y necesito corregirlo. Alguien tiene alguna solución?
Gracias.
¿te importa compartir cómo lo arreglaste? – Dbl