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