android - para - Las imágenes se cargan aleatoriamente en el buscapersonas con Glide y SimpleTarget
glide app dependencies (1)
Estoy usando Glide
para cargar imágenes en una ViewPager
usando un PagerAdapter
. Cuando cargo las imágenes usando el siguiente método:
Glide.with(mContext).load(mImage).placeholder(R.drawable.placeholder).into(mImageView);
Todo funciona bien, pero ahora necesito que el mapa de bits se deslice y lo almacene en un mapa cuando se carga para editarlo en el futuro, así que cambié este método al siguiente:
Glide.with(mContext).load(mImage).asBitmap().placeholder(R.drawable.placeholder).into(new SimpleTarget<Bitmap>() {
@Override
public void onLoadStarted(Drawable placeholder) {
super.onLoadStarted(placeholder);
mImageView.setImageDrawable(placeholder);
}
@Override
public void onResourceReady(Bitmap bitmap, GlideAnimation<? super Bitmap> glideAnimation) {
if (bitmap != null) {
mImageView.setImageBitmap(bitmap);
}
mBitmapMap.put(position, bitmap);
mInterface.onImageLoaded(position, bitmap);
}
});
Pero el resultado es que la imagen no siempre se muestra. Creo que está relacionado con el hecho de que el deslizamiento carga imágenes asíncronas y en algún momento regresa cuando el método instatiateItem
ya terminó de ejecutarse.
Parece que esta pregunta está relacionada: ViewPager PagerAdapter no actualiza la vista
Pero las sugerencias allí no me ayudaron.
¿Alguien ha encontrado este problema y tiene una solución para ello?
Gracias por adelantado.
La solución para este problema fue utilizar otro tipo de objetivo, en lugar de usar el objeto SimpleTarget
que estaba usando cuando escribí la pregunta, lo reemplacé con el objeto BitmapImageViewTarget
que creo que maneja las imágenes de forma asíncrona. Entonces el código final que utilicé para esto es:
Glide.with(BaseApplication.getInstance()).load(newContent).asBitmap().placeholder(R.drawable.ic_action_picture).into(new BitmapImageViewTarget(mIvContent) {
@Override
public void onLoadStarted(Drawable placeholder) {
super.onLoadStarted(placeholder);
mIvContent.setImageDrawable(placeholder);
}
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
super.onResourceReady(resource, glideAnimation);
mBitmapMap.put(position, resource);
progressBar.setVisibility(View.INVISIBLE);
mIvContent.setImageBitmap(resource);
}
@Override
public void onLoadFailed(Exception e, Drawable errorDrawable) {
super.onLoadFailed(e, errorDrawable);
progressBar.setVisibility(View.INVISIBLE);
}
});