私はここにいるので、どんなフィードバックも大歓迎です。私はいくつかのカスタムクラスタを表示するためにDefaultClusterRendererを使用しようとしています。マップが完全にズームされたときにクラスタ化されないようにしようとしていますので、まったく同じ質問に答えました: Disable clustering at max zoom level with Googles android-maps-utils そのコードが、私は得ているメインスレッドではないエラー。どんな助けでも大歓迎です。 私は私のコンストラクタandroid-maps-utilsを使用して最大ズームレベルでのクラスタリングを無効にする
public EspecieRenderer(Context context, GoogleMap map, ClusterManager<T> clusterManager) {
super(context, map, clusterManager);
this.mMap = map;
...
}
でこれを持っているし、私はここで
@Override
protected boolean shouldRenderAsCluster(Cluster<T> cluster) {
final float currentZoom = mMap.getCameraPosition().zoom;
final float currentMaxZoom = mMap.getMaxZoomLevel();
return currentZoom < currentMaxZoom && cluster.getSize() >= 10;
}
をやっているが、私は、クラスタを初期化しています方法です。私は負荷の近くに200種を持っているので、私は1つのまたは複数のマーカーとは、それぞれのマップに追加する、スレッドを使用してい
private void setUpClusterer() {
clusterManager = new ClusterManager<>(this, googleMap);
clusterManager.setRenderer(new EspecieRenderer<>(this, googleMap, clusterManager));
googleMap.setOnCameraChangeListener(clusterManager);
googleMap.setOnMarkerClickListener(clusterManager);
ArrayList<Especie> especies = (ArrayList<Especie>) Especie.list(this);
for (Especie especie : especies) {
ExecutorService queue = Executors.newSingleThreadExecutor();
queue.execute(new EspecieLoader(this, especie));
}
}
どこEspecieLoader
public class EspecieLoader implements Runnable {
private MainActivity context;
private Especie especie;
public EspecieLoader(MainActivity mainActivity, Especie especie) {
this.context = mainActivity;
this.especie = especie;
}
@Override
public void run() {
List<Foto> fotos = Foto.findAllByEspecieWithdCoords(context, especie);
String nombre = especie.getNombreCientifico();
for (Foto foto : fotos) {
LatLng latLng = new LatLng(foto.getLatitud(), foto.getLongitud());
Bitmap bitmap;
String path = "new/" + foto.getPath().replaceAll("-", "_").toLowerCase();
try {
bitmap = ResourcesHelper.getEncyclopediaAssetByName(context, path);
EspecieMarker especieMarker = new EspecieMarker(nombre, bitmap, latLng);
context.addSpeciesMarker(especieMarker);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
私がしようとすると、私はこれを取得しています私のアプリを実行する:
07-16 19:18:41.402 31151-32075/com.lzm.Cajas E/AndroidRuntime: FATAL EXCEPTION: Thread-47332
Process: com.lzm.Cajas, PID: 31151
java.lang.IllegalStateException: Not on the main thread
2at maps.f.g.b(Unknown Source)
at maps.z.F.a(Unknown Source)
at maps.af.t.a(Unknown Source)
at vl.onTransact(:com.google.android.gms.DynamiteModulesB:51)
at android.os.Binder.transact(Binder.java:387)
at com.google.android.gms.maps.internal.IGoogleMapDelegate$zza$zza.getCameraPosition(Unknown Source)
at com.google.android.gms.maps.GoogleMap.getCameraPosition(Unknown Source)
at com.lzm.Cajas.map.EspecieRenderer.shouldRenderAsCluster(EspecieRenderer.java:62)
at com.google.maps.android.clustering.view.DefaultClusterRenderer$RenderTask.run(DefaultClusterRenderer.java:416)
at java.lang.Thread.run(Thread.java:818)
は、あなたがどのようにクラスタマネージャを初期化し、それにアイテムを追加している示してもらえますか? – antonio
私は質問をクラスタの初期化で更新しました – luzma
問題は、 'Runnable'ではなく、メインスレッドにマーカーを追加する必要があることです。 – antonio