【问题标题】:Images loading randomly into view pager with Glide and SimpleTarget使用 Glide 和 SimpleTarget 将图像随机加载到视图寻呼机中
【发布时间】:2015-12-17 14:04:06
【问题描述】:

我正在使用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 异步加载图像并在某些时候返回 instatiateItem 方法已经完成运行的事实有一些关系。

看起来this question 是相关的。但是那里的建议对我没有帮助。有人遇到过这个问题并有解决办法吗?

【问题讨论】:

    标签: android bitmap android-viewpager android-adapter android-glide


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2019-04-17
      • 1970-01-01
      • 1970-01-01
      • 2011-06-07
      • 1970-01-01
      • 1970-01-01
      • 2018-12-16
      • 1970-01-01
      • 2018-04-13
      相关资源
      最近更新 更多