Glide和SimpleTarget在图像加载到视图页面时出现随机性

4

我正在使用Glide将图像加载到ViewPager中,使用PagerAdapter。当我使用以下方法加载图像时:

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异步加载图像的事实有关,并且在某些时候它会在 instatiateItem 方法已经完成运行时返回。

看起来像这个问题与此相关。但那里的建议没有帮助我。有没有人遇到过这个问题并有解决方案?

1个回答

5
这个问题的解决方案是使用另一种类型的目标,而不是我在写这个问题时使用的 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);
                    }
                });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接