Я использую API Google Map для своего приложения и хочу создать диспетчер кластеров.Действительно, на карте будет много Маркеров, и я хочу, чтобы она выглядела красиво.
Я перешел по этой ссылке: https://developers.google.com/maps/documentation/android-sdk/utility/marker-clustering
Вот мой код:
private ClusterManager<cluster_manager> clusterManager;
private void setUpClusterer(String choix){
clusterManager = new ClusterManager<cluster_manager>(OnlyVert.this, googleMap);
googleMap.setOnCameraIdleListener(clusterManager);
googleMap.setOnMarkerClickListener(clusterManager);
GetAllMarkers(choix);
}
// Fin localisation //
// Fonctions pour recuperer les fonctions:
public void GetAllMarkers(final String select){
DatabaseReference mMarkerRef = mDatabase.child("Pins").child(select);
mMarkerRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot snapshotNode: dataSnapshot.getChildren()) {
//Getting back my markers
String Latitude = snapshotNode.child("Latitude").getValue().toString();
String Longitude = snapshotNode.child("Longitude").getValue().toString();
String Description = snapshotNode.child("Description").getValue().toString();
String ImageURL = snapshotNode.child("ImgUrl").getValue().toString();
double lat = Double.parseDouble(Latitude);
double lon = Double.parseDouble(Longitude);
LatLng markerLocation = new LatLng(lat, lon);
// puting them on the map
Marker marker = googleMap.addMarker(new MarkerOptions()
.position(markerLocation) // Position
.title(select) // Titre
.draggable(false) // Pour la 3D
.snippet(Description) // Pour la description
);
// Cluster manager ?
cluster_manager offsetItem = new cluster_manager(lat, lon);
clusterManager.addItem(offsetItem);
/*for (int i = 0; i < 10; i++) {
double offset = i / 60d;
lat = lat + offset;
lon = lon + offset;
cluster_manager offsetItem = new cluster_manager(lat, lon);
clusterManager.addItem(offsetItem);
}*/
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
И:
public class cluster_manager implements ClusterItem {
private LatLng mPosition;
private String mTitle;
private String mSnippet;
public cluster_manager(double lat, double lon){
mPosition = new LatLng(lat, lon);
}
public cluster_manager(double lat, double lng, String title, String snippet) {
mPosition = new LatLng(lat, lng);
mTitle = title;
mSnippet = snippet;
}
@Override
public LatLng getPosition() {
return mPosition;
}
public String getmSnippet() {
return mSnippet;
}
public String getmTitle() {
return mTitle;
}
}
Дело в том, что строка:
googleMap.setOnCameraIdleListener(clusterManager);
Это то, что написано в документации, но это не такработа:
error: incompatible types: ClusterManager<cluster_manager> cannot be converted to OnCameraIdleListener
Так что я бросил это в то, что он хочет:
googleMap.setOnCameraIdleListener((GoogleMap.OnCameraIdleListener) clusterManager);
Но:
java.lang.ClassCastException: com.google.maps.android.clustering.ClusterManager cannot be cast to com.google.android.gms.maps.GoogleMap$OnCameraIdleListener
Я пробовал пару вещей, но этоне будет работать
Надеюсь, вы сможете помочь мне заставить мой менеджер кластеров работать. Спасибо за вашу помощь и время:)