【发布时间】:2013-05-04 06:41:33
【问题描述】:
我对谷歌地图中的自定义标记有疑问。我会尽力解释。
我有一些标记,并且我做了一个 Asyntask,如果有必要,它会对其进行聚类,返回一个 LinkedHashMap<Point, ArrayList<MarkerOptions>> clusters 我有聚类的地方。每个位置代表一个簇(可以有一个带有 1 个标记的簇)
获得此列表后,我将集群添加到地图中:
这是我调用 Clusterizer 的活动。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
map.getUiSettings().setMyLocationButtonEnabled(true);
CameraUpdate camUpd1 = CameraUpdateFactory.newLatLngZoom(new LatLng(41.40520680710329,2.191342011603923),MAP_ZOOM_LEVEL);
map.animateCamera(camUpd1);
loadMarkers();
map.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition position) {
if(position.zoom != oldZoom) {
try {
clusters = null;
map.clear();
Clusterizer.setContext(getApplicationContext());
clusters = Clusterizer.clusterMarkers(map, markers, INTERVAL);
} catch (ExecutionException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
oldZoom = position.zoom;
}
});
}
private void loadMarkers() {
markers.add(new Marker(41.40520680710229,2.191342011603823,"Glorias1","Centro Comercial",true).getMarker());
markers.add(new Marker(41.40520680710229+0.0005,2.191342011603823-0.0005,"Glorias11","Centro Comercial",true).getMarker());
markers.add(new Marker(41.40520680710229+0.0005,2.191342011603823+0.0005,"Glorias111","Centro Comercial",true).getMarker());
markers.add(new Marker(41.40520680710229-0.0005,2.191342011603823+0.0005,"Glorias1111","Centro Comercial",true).getMarker());
markers.add(new Marker(41.40520680710229-0.0005,2.191342011603823-0.0005,"Glorias1111","Centro Comercial",true).getMarker());
}
并且,在 Asyntask 中计算集群后(它确实可以)postExecute 方法,这样做:
@Override
protected void onPostExecute(
LinkedHashMap<Point, ArrayList<MarkerOptions>> clusters) {
map.clear();
for(Point point: clusters.keySet()) {
ArrayList<MarkerOptions> markersForPoint = clusters.get(point);
MarkerOptions mainMaker= markersForPoint.get(0);
//If the point (taken from cluster, has more than 1 markerOption, means that has been clusterized, so It have to be printed with the //modified canvas that contains the number of markers clusterized)
if(markersForPoint.size() > 1) {
mainMaker.title(Integer.toString(markersForPoint.size()));
Bitmap.Config conf = Bitmap.Config.ARGB_8888;
Bitmap bmp = Bitmap.createBitmap(80, 80, conf);
Canvas canvas1 = new Canvas(bmp);
Paint color = new Paint();
color.setTextSize(35);
color.setColor(Color.BLACK
canvas1.drawBitmap(BitmapFactory.decodeResource(context.getResources(),
R.drawable.pin), 0,0, color);
canvas1.drawText("",10,40,color);
canvas1.drawText(Integer.toString(markersForPoint.size()), 10, 40, color);
mainMaker.icon(BitmapDescriptorFactory.fromBitmap(bmp));
mainMaker.anchor(0.5f, 1);
}
map.addMarker(mainMaker);
}
}
这就是问题所在......
如果是聚集的没问题,显示没问题,但是当我放大cluster list时没问题,但标记不是
这就是集群什么时候“集群”,什么时候不应该集群
我该如何解决?我在添加标记之前清理了地图...
谢谢大家!
集群:
未聚类
【问题讨论】:
-
不清楚你要求什么。
-
@MaciejGórski 我试着用其他方式解释.. ^^。当我在地图上放大或缩小时,如果要关闭标记(以屏幕上的像素为单位),我会聚集要关闭的标记(例如 70 像素)。当标记聚集时,我不使用 GMap 的默认标记,我使用自定义标记,“绘制”了代表的标记数量。但是当我放大(集群消失,现在可以看到5个标记(例如)时,代表集群的标记,仍然是自定义的,什么时候应该是默认标记。
标签: android google-maps customization markerclusterer