1.首先需要创建两个ArrayList(一个存放所有的maker数据,一个存放屏幕内的maker数据)
private ArrayList<MarkerOptions> markerOptionsListInView = new ArrayList<MarkerOptions>();
private ArrayList<MarkerOptions> markerOptionsListall = new ArrayList<MarkerOptions>();
2.第二步把maker数据添加到markerOptionsListall 里边
private void addMarkersToMap() {
int size = chargList.size();
for (int i = 0; i < size; i++) {
double wei =chargList.get(i).getPoi_wei();
double jing = chargList.get(i).getPoi_jing();
LatLng latlng = new LatLng(wei, jing);
markerOptionsListall.add(new MarkerOptions().position(latlng).title(i + ""));
}
3.在添加屏幕移动的监控,然后去动态判断屏幕内的maker是否需要聚合
@Override
public void onCameraChangeFinish(CameraPosition arg0) {
// TODO Auto-generated method stub
resetMarks();
}
private void resetMarks() {
// 开始刷新
//executorService.execute(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Projection projection = mAMap.getProjection();
Point p = null;
markerOptionsListInView.clear();
// 获取在当前视野内的marker;提高效率
ArrayList<MyGaodeImageView> clustersMarker = new ArrayList<MyGaodeImageView>();
for (MarkerOptions mp : markerOptionsListall) {
p = projection.toScreenLocation(mp.getPosition());
if (p.x < 0 || p.y < 0 || p.x > screenWidth || p.y > screenHeight || p.x == 0 || p.y == 0
|| p.x == screenWidth || p.y == screenHeight) {
// 不添加到计算的列表中
} else {