0

地図上に 100 個以上のマーカーを表示し、マーカーをクリックした後に情報ウィンドウを表示する必要があります。私はandroid google maps api v2を使用しましたが、そのような数のマーカーで遅れています。そこで、android-maps-extensions に切り替えることにしました。私がやった後、マーカーをクリックした後に情報ウィンドウが表示されなくなりました。

これが私のコードです:

private void prepareMap() {
    SupportMapFragment fragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.locationsMap);
    map = fragment.getExtendedMap();

    ClusteringSettings settings = new ClusteringSettings();
    settings.clusterOptionsProvider(new ClusterOptionsProvider() {
        @Override
        public ClusterOptions getClusterOptions(List<Marker> markers) {
            float hue = BitmapDescriptorFactory.HUE_RED;
            BitmapDescriptor icon = BitmapDescriptorFactory.defaultMarker(hue);
            return new ClusterOptions().icon(icon);
        }
    });
    settings.clusterSize(100);
    settings.addMarkersDynamically(true);
    map.setClustering(settings);

    map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
        @Override
        public boolean onMarkerClick(Marker marker) {
            // breakpoint here are working. marker is not null
            marker.showInfoWindow();
            return false;
        }
    });
}

public void onLoadFinished(android.support.v4.content.Loader loader, Cursor cursor) {
    if (map != null) {
        cursor.moveToFirst();
        int count = cursor.getCount();
        for (int i = 0; i < count; i++) {

            Location location = new Location(cursor);

            MarkerOptions options = new MarkerOptions();
            options.position( new LatLng(location.getLatitude(), location.getLongitude()));
            options.title(location.getTitle()); // title is not null
            options.snippet(location.getAddress()); // address is not null
            options.data(location);
            map.addMarker(options);
            cursor.moveToNext();
        }
    }
}

助言がありますか?独自の InfoWindowAdapter を使用してみましたが、このウィンドウを適切なコンテンツに合わせてスケーリングしていませんが、xml で wrap_content 属性を使用しています。

4

1 に答える 1

0

ClusterOptions(まだ)タイトルを設定するためのサポートがないため、使用する必要がありますInfoWindowAdapter(希望どおりに機能しない理由について別の質問をすることができます)または自分自身に追加titleClusterOptionsて、その値がvirtualマーカーに転送されることを確認しますクラスターを表します。これは複雑に聞こえますが、かなり簡単です。タイトルがクラスターでサポートされていないことに関する問題を GitHub に追加することもできます。
その後、次のようなものを使用できます。

return new ClusterOptions().icon(icon).title("Test");

次に、どのタイトルがニーズに最も適しているかを判断する必要があります。List<Marker>このグループのマーカーのタイトルを計算するために使用する可能性が最も高いでしょう。

注: 個別のマーカーが表示されるまでズームすると、それらをクリックしてタイトルを表示できます。そうでない場合は、コードにさらに問題があります。

于 2014-04-02T19:53:27.087 に答える