我正在为我的应用程序使用google map API,我想创建一个集群管理器。确实,地图上将会有很多标记,我希望它看起来不错。
我已点击以下链接: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
我已经尝试了几件事,但是没用
我希望您能够帮助我使集群管理器正常工作 感谢您的帮助和时间:)