В моем ClusterRenderer я пытаюсь изменить значки значков на карте Google в моем приложении, но мои значки не сохраняются в папке для рисования, но вместо этого я должен загрузить их из URL.Для этого я использую библиотеку Picasso, но проблема в том, что значок не меняется при первой загрузке.Во второй раз все работает нормально.
Вот мой код, в котором я пытаюсь изменить значок:
public class MyRenderer extends DefaultClusterRenderer<MyClusterItem> {
private Set<Target> targetsProtectedFromGarbageCollection = new HashSet<>();
@Override
protected void onBeforeClusterItemRendered(final MyClusterItem item, final MarkerOptions markerOptions) {
try {
if(item.getPinUrl()!=null){
Target target = new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
markerOptions.icon(BitmapDescriptorFactory.fromBitmap(iconBitmap));
targetsProtectedFromGarbageCollection.remove(this);
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
targetsProtectedFromGarbageCollection.remove(this);
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
};
targetsProtectedFromGarbageCollection.add(target);
Picasso.with(mContext).load(item.getPinUrl()).into(target);
}else{
// case when not loading icon from url but get it from drawable folder
}
} catch (RuntimeException e) {
Log.d("MyRenderer", "Could not set: " + item.toString());
}
super.onBeforeClusterItemRendered(item, markerOptions);
}
}
Я использую set targetsProtectedFromGarbageCollection
, чтобы сделать сильную ссылку на Target
, потому чтодо того, как у меня возникла проблема с тем, что onBeforeClusterItemRendered
вообще не вызывали.Решение найдено здесь .Теперь onBeforeClusterItemRendered
вызывается правильно, но значок не меняется.