Изображения загружаются случайным образом в пейджер с помощью Glide и SimpleTarget

Я использую 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);
                }
            });

Но в результате изображение не всегда показывается. Я думаю, это как-то связано с тем фактом, что скольжение загружает изображения асинхронно и в какой-то момент возвращается, когда метод instatiateItem уже завершил работу.

Похоже, что этот вопрос связан. Но советы там мне не помогли. Кто-нибудь сталкивался с этой проблемой и имеет решение?


person Emil Adz    schedule 17.12.2015    source источник


Ответы (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);
                    }
                });
person Emil Adz    schedule 20.12.2015