百度地图很好用,让我意外的是竟然原生聚合功能。
不过让人苦恼的是,百度竟然没有中心点坐标的文档(明确中心点的获取办法),试了好多次才知道使用:setOnMapStatusChangeListener
监听地图的状态即可获得百度的中心点坐标,代码如下:
/*map dragg */
mBaiduMap.setOnMapStatusChangeListener( new BaiduMap.OnMapStatusChangeListener() {
/**
* 手势操作地图,设置地图状态等操作导致地图状态开始改变。
* @param status 地图状态改变开始时的地图状态
*/
public void onMapStatusChangeStart(MapStatus status){
}
/**
* 地图状态变化中
* @param status 当前地图状态
*/
public void onMapStatusChange(MapStatus status){
}
/**
* 地图状态改变结束
* @param status 地图状态改变结束后的地图状态
*/
public void onMapStatusChangeFinish(MapStatus status){
//移动以后
LatLng ll=status.target;
my_lat=ll.latitude;
my_lng=ll.longitude;
Log.d("map change","sts ch fs:"+my_lat+","+my_lng+"");
}
});
代码解析
当百度地图被移动以后,会触发一系列事件,最后会停在onMapStatusChangeFinish
这个时间上。当然,如果你注册监听那么将会被代码截获并写自己的逻辑代码。
按照上面说的当百度移动结束以后,在onMapStatusChangeFinish
会得到一个MapStatus
类型的实例,这个MapStatus的target成员变量即为百度移动被移动以后的中心点坐标。
即:
public void onMapStatusChangeFinish(MapStatus status){
//移动以后
LatLng ll=status.target;
my_lat=ll.latitude;
my_lng=ll.longitude;
Log.d("map change","sts ch fs:"+my_lat+","+my_lng+"");
}
扩展
当百度被移动得很小的时候,可以把前后的中心点做差,超出一定的范围后再处理事件。
如:
Point startPoint = ject.toScreenLocation(startLng);
Point finishPoint = ject.toScreenLocation(finishLng);
double x = Math.abs(finishPoint.x - startPoint.x);
double y = Math.abs(finishPoint.y - startPoint.y);
if (x > 5 || y > 5) {
//逻辑处理代码
}