使用 Glide 和 SimpleTarget 将图像随机加载到视图寻呼机中
Images loading randomly into view pager with Glide and SimpleTarget
我正在使用 Glide
使用 PagerAdapter
将图像加载到 ViewPager
中。
当我使用以下方法加载图像时:
Glide.with(mContext).load(mImage).placeholder(R.drawable.placeholder).into(mImageView);
一切正常,但现在我需要从 glide 获取位图并在它加载时将其存储在地图中以供将来编辑,因此我将此方法切换为以下方法:
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);
}
});
但结果是图像并不总是显示。我认为这与 glide 异步加载图像这一事实有某种关系,并且在某些时候它 returns 当 instatiateItem
方法已经完成时 运行.
看起来 this question 是相关的。但是那里的建议对我没有帮助。有人遇到过这个问题并有解决方案吗?
这个问题的解决方案是使用另一种目标,而不是使用我在写问题时使用的 SimpleTarget
对象,我将其替换为我的 BitmapImageViewTarget
对象guess 可以更好地异步处理图像。所以我使用的最终代码是:
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);
}
});
我正在使用 Glide
使用 PagerAdapter
将图像加载到 ViewPager
中。
当我使用以下方法加载图像时:
Glide.with(mContext).load(mImage).placeholder(R.drawable.placeholder).into(mImageView);
一切正常,但现在我需要从 glide 获取位图并在它加载时将其存储在地图中以供将来编辑,因此我将此方法切换为以下方法:
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);
}
});
但结果是图像并不总是显示。我认为这与 glide 异步加载图像这一事实有某种关系,并且在某些时候它 returns 当 instatiateItem
方法已经完成时 运行.
看起来 this question 是相关的。但是那里的建议对我没有帮助。有人遇到过这个问题并有解决方案吗?
这个问题的解决方案是使用另一种目标,而不是使用我在写问题时使用的 SimpleTarget
对象,我将其替换为我的 BitmapImageViewTarget
对象guess 可以更好地异步处理图像。所以我使用的最终代码是:
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);
}
});