Я пытаюсь создать собственный значок кластера для моей карты Google.
Ранее я пытался расширить AsyncTask и использовать execute (). Get () для извлечения drawable из submit (). Get (), но происходит то же самое, что и при реализации Callable. Я также пытался получить ImageView от загрузки (URI) .into (ImageView), но операция завершена после остальной части кода.
final List<Drawable> profilePhotos = new ArrayList<>(Math.min(4, markerCluster.getSize()));
for (MarkerCluster p : markerCluster.getItems()) {
// Draw 4 at most.
if (profilePhotos.size() == 4) break;
final Uri bitmapUri = Uri.parse(p.getDescription());
Drawable drawable = null;GlideBitmapBuilder(bitmapUri));
try {
drawable = Executors.newSingleThreadExecutor().submit(new GlideBitmapBuilder(bitmapUri)).get();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
drawable.setBounds(0, 0, 200, 200);
profilePhotos.add(drawable);
}
MultiDrawable multiDrawable = new MultiDrawable(profilePhotos);
multiDrawable.setBounds(0, 0, 200, 200);
clusterImage.setImageDrawable(multiDrawable);
Bitmap icon = clusterIcon.makeIcon(String.valueOf(markerCluster.getSize()));
markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon));
Где класс GlideBitmapBuilder:
private class GlideBitmapBuilder implements Callable<Drawable> {
Uri bitmapUri;
private GlideBitmapBuilder(Uri bitmapUri) {
this.bitmapUri = bitmapUri;
}
@Override
public Drawable call() throws Exception {
drawable = GlideApp.with(getApplication()).load(bitmapUri).submit(200, 200).get();
return drawable;
}
}
Ожидаемый результат должен состоять в успешном возвращении переменной drawable, из которой я смогу создавать иконки для своих кластеров, но в итоге она зависает в точке, где я получаю drawable из GlideApp.
У меня нет идей, как мне к этому подойти, поэтому любая помощь будет очень полезной. Есть ли способ, чтобы submit (). Get () не зависал? Или есть лучший способ визуализации значков кластера?
Большое спасибо