我正在使用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");
}
};
答案 0 :(得分:1)
摘自Glide Custom Targets文档。
如果您使用的是自定义目标,并且没有加载到View中 这将允许您继承ViewTarget的子类,您需要实施 getSize()方法。
因此,您只需将以下代码放入getSize
方法中
@Override
public void getSize(SizeReadyCallback cb) {
cb.onSizeReady(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL);
}
现在,运行应用程序时将调用onResourceReady
方法。