无法使用Glide v4加载位图

时间:2018-10-28 14:42:13

标签: android android-imageview android-glide

我正在使用Glide v4加载位图,然后可以将其用作地图上的标记。当我像这样使用已弃用的SimpleTarget时,一切正常。

GlideApp.with(getContext()).asBitmap().load(url)
    .into(new SimpleTarget<Bitmap>() {
        @Override
        public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {

            // load bitmap as marker
        }
    });

当我尝试删除不推荐使用的代码并使用如下所示的Target<Bitmap>时,我可以看到onLoadStarted被调用,但是onResourceReady从未被调用,onLoadFailed也不被调用。

GlideApp.with(getContext()).asBitmap()
    .load(UrlHelper.createUrl(poi.getMapMarker()))
    .into(marketBitmap);

private Target<Bitmap> marketBitmap = new Target<Bitmap>() {
    @Override
    public void onLoadStarted(@Nullable Drawable placeholder) {
        Log.d("GlideMar", "marker load started");
    }

    @Override
    public void onLoadFailed(@Nullable Drawable errorDrawable) {
        Log.e("GlideMar", "marker load failed");
    }

    @Override
    public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
        Log.d("GlideMar", "onResourceReady");
    }

    @Override
    public void onLoadCleared(@Nullable Drawable placeholder) {
        Log.d("GlideMar", "marker onLoadCleared");
    }

    @Override
    public void getSize(@NonNull SizeReadyCallback cb) {

    }

    @Override
    public void removeCallback(@NonNull SizeReadyCallback cb) {

    }

    @Override
    public void setRequest(@Nullable Request request) {

    }

    @Nullable
    @Override
    public Request getRequest() {
        return null;
    }

    @Override
    public void onStart() {
        Log.d("GlideMar", "marker onStart");
    }

    @Override
    public void onStop() {
        Log.d("GlideMar", "marker onStop");
    }

    @Override
    public void onDestroy() {
        Log.d("GlideMar", "marker onDestroy");
    }
};

1 个答案:

答案 0 :(得分:1)

摘自Glide Custom Targets文档。

  

如果您使用的是自定义目标,并且没有加载到View中   这将允许您继承ViewTarget的子类,您需要实施   getSize()方法。

因此,您只需将以下代码放入getSize方法中

@Override
public void getSize(SizeReadyCallback cb) {
    cb.onSizeReady(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL);
}

现在,运行应用程序时将调用onResourceReady方法。