Simpletarget已经被弃用,Glide怎么办?

31

自Glide更新早期起,SimpleTarget已被弃用

Glide.with(getActivity())
        .load(uri)
        .asBitmap()
        .error(R.drawable.no_result)
        .diskCacheStrategy(DiskCacheStrategy.ALL)
        .into(new SimpleTarget<Bitmap>() {
            @Override
            public void onResourceReady(final Bitmap bitmap, GlideAnimation glideAnimation) {
                imageView.setImageBitmap(bitmap);
                imageView.buildDrawingCache();
            }
        });
2个回答

46

我们使用自定义目标(CustomTarget)代替 SimpleTarget

Glide.with(this)
            .asBitmap()
            .load(uri)
            .error(R.drawable.no_result)
            .diskCacheStrategy(DiskCacheStrategy.ALL)
            .into(new CustomTarget<Bitmap>() {
                @Override
                public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
                    imageView.setImageBitmap(resource);
                    imageView.buildDrawingCache();
                }
                @Override
                public void onLoadCleared(@Nullable Drawable placeholder) { }
            });

6

来自Glide文档

如果将内容加载到视图中,请使用CustomViewTarget;如果在后台加载,请使用下载APIthe download API;或者对于任何专业用例,请使用CustomTarget。如果用户没有实现BaseTarget.onLoadCleared(android.graphics.drawable.Drawable),则使用BaseView不安全,这会导致从UI引用已回收的位图,并且很难排查崩溃。

这对我有用:

Glide.with(this)
    .asBitmap()
    .load(uri)
    .apply(options)
    .into(new CustomTarget() {
        @Override
        public void onResourceReady(@NonNull Object resource, @Nullable Transition transition) {
            mBackgroundManager.setBitmap((Bitmap)resource);
        }
        @Override
        public void onLoadCleared(@Nullable Drawable placeholder) { }
    });

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