地图视野
地图视野操作主要包括地图的缩放、移动、旋转、倾斜、改变地图中心点等操作,以动画的方式把地图变换到指定的状态。CameraUpdateFactory提供13种方法执行地图视野操作。
可以通过 TencentMap 的 animateCamera()
方法以动画的方式把地图变换到指定的状态,也可以通过TencentMap的 moveCamera()
方法直接把地图变换到指定的状态; TencentMap 的 stopAnimation()
可以停止地图所有正在进行的动画。具体如下:
/**
* 以动画的方式把地图变换到指定的状态
*
* 参数:
* cameraupdate:状态对象
* duration:动画执行时间(单位:ms)
* cancelablecallback:动画状态监听器
*/
tencentMap.animateCamera(CameraUpdate cameraupdate);
tencentMap.animateCamera(CameraUpdate cameraupdate, CancelableCallback cancelablecallback);
tencentMap.animateCamera(CameraUpdate cameraupdate, long duration,CancelableCallback cancelablecallback);
// 直接把地图变换到指定的状态
tencentMap.moveCamera(CameraUpdate cameraupdate);
// 停止地图所有正在进行的动画
tencentMap.stopAnimation();
改变地图视野
由CameraPosition生成地图状态对象,直接改变地图视野。
注意:腾讯地图SDK使用的是国测局坐标系(火星坐标,GCJ-02)。
直接设置地图视野到指定状态的示例代码如下:
CameraUpdate cameraSigma =
CameraUpdateFactory.newCameraPosition(new CameraPosition(
new LatLng(39.977290,116.337000), // 中心点坐标,地图目标经纬度
19, // 目标缩放级别
45f, // 目标倾斜角[0.0 ~ 45.0] (垂直地图时为0)
45f)); // 目标旋转角 0~360° (正北方为0)
tencentMap.moveCamera(cameraSigma); // 移动地图
效果如下图所示:
设置地图的锚点
设置方法为:
/**
* 设置camera变换的中心点
*
* xratio 水平方向位置
* yratio 垂直方向位置
*/
tencentMap.setCameraCenterProportion(float xratio, float yratio);
或者:
/**
* 设置camera变换的中心点
*
* xratio 水平方向位置
* yratio 垂直方向位置
* moveMap 改变中心点的同时是否将原有中心点移到新的中心点
*/
tencentMap.setCameraCenterProportion(float xratio, float yratio, boolean moveMap);
修改地图中心点
CameraUpdateFactory中提供scrollBy()
方法平移地图,newLatLng()
方法改变地图中心点、移动地图,如下所示:
/**
* 将地图向左下移动xPixel和yPexil像素
*
* xPixel: 向左移动的像素
* yPixel: 向下移动的像素
*/
tencentMap.animateCamera(CameraUpdateFactory.scrollBy(float xPixel, float yPixel));
/**
* 把地图移动指定的经纬度到屏幕中心
*
* latlng: 为目标经纬度
*/
tencentMap.animateCamera(CameraUpdateFactory.newLatLng(LatLng latlng));
/**
* 把地图以latlng为中心,以zoom为缩放级别,移到屏幕中心
*
* latlng: 目标经纬度
* zoom: 新的指定级别,取值范围为 [3.0 ~ 19.0]
*/
tencentMap.animateCamera(CameraUpdateFactory.newLatLng(LatLng latlng, float zoom));
把地图移动到指定的经纬度范围,具体应用参见“地图标注”部分:
/**
* 把地图移到到以指定的经纬度范围的,并且在这个范围四周加上padding像素的填充
*
* latLngBounds: 经纬度范围
* padding: 四周填充的像素
*/
tencentMap.animateCamera(CameraUpdateFactory.newLatLngBounds(LatLngBounds latlngbounds, int padding));
/**
* 把地图移动到指定经纬度范围,以适应当前屏幕的显示,并且可以为上下左右分别设置填充的像素
*
* latlngbounds: 经纬度范围
* leftPadding: 左侧填充像素
* rightPadding: 右侧填充像素
* topPadding: 右侧填充像素
* bottomPadding: 顶部填充像素、底部填充像素
*/
tencentMap.animateCamera(CameraUpdateFactory.newLatLngBoundsRect(LatLngBounds latlngbounds, int leftPadding, int rightPadding, int topPadding, int bottomPadding));
/**
* 把地图移动到指定元素所在范围,以适应当前屏幕的显示,并且可以为上下左右分别设置填充的像素.
*
* latLngBounds: 经纬度范围(指定西南和东北的坐标点)
* padding: 四周填充的像素
* leftPadding: 左侧填充像素
* rightPadding: 右侧填充像素
* topPadding: 顶部填充像素
* bottomPadding: 底部填充像素
* elements: 要显示在底图上的元素
*/
tencentMap.animateCamera(CameraUpdateFactory.newElementBoundsRect(List<IMapElement> elements, int leftPadding, int rightPadding, int topPadding, int bottomPadding));
修改地图缩放级别
CameraUpdateFactory中提供zoomIn()
、zoomOut()
、zoomTo()
、zoomBy()
等方法可以改变地图的缩放级别。
设置方法为:
// 把地图放大一级
tencentMap.animateCamera(CameraUpdateFactory.zoomIn());
// 把地图缩小一级
tencentMap.animateCamera(CameraUpdateFactory.zoomOut());
// 把地图缩放到目标级别zoomLevel,取值范围为 [4.0 ~ 20.0]
tencentMap.animateCamera(CameraUpdateFactory.zoomTo(float zoomLevel));
// 在当前的缩放级别下,把缩放级别变化zoomLevelDelta,如果超出了范围,则停止在范围内
tencentMap.animateCamera(CameraUpdateFactory.zoomBy(float zoomLevelDelta));
/**
* 在当前的缩放级别下,把缩放级别变化zoomLevelDelta,如果超出了范围,则停止在范围内;
*
* zoomLevelDelta: 要变化的级别数值
* point: 当前地图所处的地图点,移动后屏幕处于中心点
*/
tencentMap.animateCamera(CameraUpdateFactory.zoomBy(float zoomLevelDelta, Point point));
限制地图的缩放级别范围
// 设置地图的最大缩放级别 (3~19)
tencentMap.setMaxZoomLevel(int zoomLevel);
// 设置地图的最小缩放级别
tencentMap.setMinZoomLevel(int zoomLevel);
旋转、倾斜地图
设置方法为:
// 将地图顺时针旋转rotate度,并且向后倾斜skew度
tencentMap.animateCamera(CameraUpdateFactory.rotateTo(float rotate, float skew));
地图视野变化监听
// 设置地图视野变化的监听接口
tencentMap.setOnCameraChangeListener(new TencentMap.OnCameraChangeListener() {
@Override public void onCameraChange(CameraPosition cameraPosition) {
}
@Override public void onCameraChangeFinished(CameraPosition cameraPosition) {
}
}
);