6

私は 1 つの ImageView と 1 つの画像を Glide でロードしています。

Glide.with(ImageView.getContext())
    .load(url)
    .dontAnimate()
    .placeholder(R.drawable.placeholder)
    .signature(stringSignature)
    .into(new GlideDrawableImageViewTarget(ImageView) {
        @Override
        public void onResourceReady(GlideDrawable drawable, GlideAnimation anim) {
            super.onResourceReady(drawable, anim);
            progressBar.setVisibility(View.GONE);
        }
    });

画像を更新したい場合は、新しい署名のみを使用してこの同じコードを再度実行します。完全に動作していますが、新しい読み込みが開始されると、表示されている画像がすぐになくなります。

質問

イメージを ImageView に保持し、新しいイメージがダウンロードされた後に置き換えることは可能ですか?

4

2 に答える 2

4

それが期待される動作です。
を呼び出すたびに、ターゲットとそれに関連付けられたリクエスト.load(x)で Glide 呼び出しを行います。 これが、Glide がビットマップのプールを処理できる方法です。そうしないと、ビットマップをいつリサイクルするかを知る方法がありません。 これを実装するには、2 つのターゲットを切り替える必要があります。コア アイデアは次のとおりです。 .clear()

    public <T> void loadNextImage(@NonNull T model,
                                  @NonNull BitmapTransformation... transformations) {
        //noinspection MagicNumber
        int hash = model.hashCode() + 31 * Arrays.hashCode(transformations);
        if (mLastLoadHash == hash) return;
        Glide.with(mContext).load(model).asBitmap().transform(transformations).into(mCurrentTarget);
        mLastLoadHash = hash;
    }

Target mCurrentTarget;



private class DiaporamaViewTarget extends ViewTarget<ImageView, Bitmap> {

        @Override
        public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
            mLoadedDrawable = new BitmapDrawable(mImageView.getResources(), resource);
           // display the loaded image 
            mCurrentTarget = mPreviousTarget;
于 2015-03-30T22:14:13.627 に答える
1

次のように、ロードされた Drawable を次のロードでプレースホルダーとして設定できます。

    private Drawable placeholder = ContextCompat.getDrawable(ctx, R.drawable.placeholder);

    public void loadImage(String url, ImageView imageView) {
        Glide.with(imageView.getContext())
            .load(url)
            .placeholder(placeholder)
            .into(new GlideDrawableImageViewTarget(imageView) {
                @Override
                public void onResourceReady(GlideDrawable drawable, GlideAnimation anim) {
                    super.onResourceReady(drawable, anim);
                    placeholder = drawable;
                }
            });
    }
于 2016-10-07T15:55:45.457 に答える