腾讯地图SDK Android版开辟 5 地图交互操作

打印 上一主题 下一主题

主题 974|帖子 974|积分 2922

前言

前文介绍了三个主题:创建显示地图;切换地图范例;显示定位。本文重点介绍地图交互操作及相关的类和接口。


  • 腾讯地图支持多种地图交互操作,用户可以通过手势或控件进行地图操作,以实现更好的地图浏览体验。另一方面开辟者通过代码实现特定业务场景的地图交互。
  • 腾讯地图通过设定不同的地图状态,来改变地图视野。
  • 末了是不属于地图操作的地图事件,但是也很重要。

    • 比如地图加载完成事件,一些特定接口必要在地图加载完成后才气调用(在显示定位本文均有提及)。

控件介绍

控件介绍

腾讯地图提供一些根本的地图控件,包罗LOGO、指南针、比例尺、定位按钮。
控件功能默认显示默认位置LOGO可设置显示相对位置(左下,中下,右下,左上,中上,右上)
设置Logo的缩放比例显示右下角指南针设置是否显示,设置罗盘的填边不显示左上角比例尺设置是否显示,设置比例尺是否淡出,设置比例尺的显示相对位置位置不显示左下角定位按钮设置是否显示不显示右下角 接口

UiSettings 类用于操控地图控件,以定制自己想要的视图效果。UiSettings类中地图控件的接口:


  • LOGO
范例方法说明voidsetLogoPosition(int logoAnchor)设置Logo的显示位置voidsetLogoPosition(int logoAnchor, int[] marginParams)根据地图四个Anchor 模式(左上、左下、右下、右上)以及相应的Margins来设置Logo位置voidsetLogoPositionWithMargin(int position, int top, int bottom, int left, int right)设置Logo的显示位置,带偏移量,单位像素 设置Logo的显示位置voidsetLogoScale(float logoScale)设置Logo的缩放比例,比例范围(0.7~1.3)voidsetLogoSize(int logoSize)设置图标巨细,暂时不生效

  • 指南针
范例方法说明booleanisCompassEnabled()获取当前是否开启罗盘控件voidsetCompassEnabled(boolean flag)设置是否显示指南针voidsetCompassExtraPadding(int xPadding, int yPadding)设置罗盘的填边voidsetCompassExtraPadding(int padding)设置罗盘的填边,只对Y轴生效

  • 比例尺
范例方法说明booleanisScaleViewEnabled()获取当前是否显示比例尺voidsetScaleViewEnabled(boolean show)设置当前是否显示比例尺voidsetScaleViewFadeEnable(boolean enable)设置比例尺是否淡出voidsetScaleViewPosition(int position)设置比例尺的显示位置voidsetScaleViewPositionWithMargin(int position, int top, int bottom, int left, int right)设置比例尺的显示位置,带偏移量,单位像素

  • 定位按钮
范例方法说明booleanisMyLocationButtonEnabled()获取当前是否显示定位控件voidsetMyLocationButtonEnabled(boolean flag)设置是否显示定位按钮 控件常量

TencentMapOptions类中的控件常量:


  • 定位
常量说明LOGO_POSITION_BOTTOM_LEFT设置地图logo的显示位置:左下角LOGO_POSITION_TOP_LEFT设置地图logo的显示位置:左上角LOGO_POSITION_TOP_CENTER设置地图logo的显示位置:顶部居中LOGO_POSITION_TOP_RIGHT设置地图logo的显示位置:右上角LOGO_POSITION_BOTTOM_RIGHT设置地图logo的显示位置:右下角(默认)LOGO_POSITION_BOTTOM_CENTER设置地图logo的显示位置:底部居中

  • 比例尺
常量说明SCALEVIEW_POSITION_BOTTOM_LEFT设置地图比例尺的显示位置:左下角,默认SCALEVIEW_POSITION_TOP_LEFT设置地图比例尺的显示位置:左上角SCALEVIEW_POSITION_TOP_CENTER设置地图比例尺的显示位置:顶部居中SCALEVIEW_POSITION_TOP_RIGHT设置地图比例尺的显示位置:右上角SCALEVIEW_POSITION_BOTTOM_RIGHT设置地图比例尺的显示位置:右下角SCALEVIEW_POSITION_BOTTOM_CENTER设置地图比例尺的显示位置:底部居中 地图控件点击事件

范例接口说明static interfaceTencentMap.OnCompassClickedListener当地图的罗盘被点击时的回调接口static interfaceTencentMap.OnMyLocationClickListener点击我的位置时的回调接口 范例方法说明voidsetOnCompassClickedListener(TencentMap.OnCompassClickedListener onCompassClickedListener)设置罗盘位按钮监听接口 示例代码

通过 TencentMap 类实现UiSettings 类对象的实例化:
  1. UiSettings uiSettings = map.getUiSettings();
复制代码


  • Logo
  1. // 设置Logo的显示位置
  2. int logoAnchor = TencentMapOptions.LOGO_POSITION_BOTTOM_LEFT;
  3. uiSettings.setLogoPosition(logoAnchor);
复制代码


  • 指南针
  1. // 获取当前是否开启罗盘控件
  2. boolean enabled = uiSettings.isCompassEnabled();
  3. // 设置是否显示指南针
  4. uiSettings.setCompassEnabled(true);
  5. int xPadding = 20;
  6. int yPadding = 20;
  7. // 设置罗盘的填边
  8. uiSettings.setCompassExtraPadding(xPadding, yPadding);
复制代码


  • 比例尺
  1. // 获取当前是否显示比例尺
  2. boolean isShow = uiSettings.isScaleViewEnabled();
  3. // 设置当前是否显示比例尺
  4. uiSettings.setScaleViewEnabled(true);
  5. // 设置比例尺是否淡出
  6. uiSettings.setScaleViewFadeEnable(false);
  7. // 设置比例尺的显示位置
  8. int position = TencentMapOptions.LOGO_POSITION_BOTTOM_LEFT;
  9. uiSettings.setScaleViewPosition(position);
复制代码


  • 定位按钮
  1. // 获取当前是否显示定位控件
  2. boolean isShow = uiSettings.isMyLocationButtonEnabled();
  3. // 设置是否显示定位按钮
  4. uiSettings.setMyLocationButtonEnabled(true);
复制代码
效果图


地图手势

腾讯地图SDK支持多种手势,比如单指按下、单指抬起、单指点击、单指双击、单指长按、滑动、滚动、缩放、倾斜、旋转等手势,还有包含一些组合手势,比如双击放大地图、双指单击缩小地图、单指双击上下滑动缩放地图等。
地图手势方法说明

手势说明状态开关默认平移单指长按,
用手指拖动地图四处滚动平移可禁用或开启开启滑动单指滑动,
用手指滑动地图,显示动画效果可禁用或开启开启缩放1.单指双击 2.双指单击 3.单指双击长按屏幕上下滑动,
缩放手势可改变地图的缩放级别可禁用或开启开启倾斜双指长按屏幕上下滑动,
通过两个手指的移动,控制地图的倾斜角可禁用或开启开启旋转双指长按屏幕左右交替旋转
通过两个手指控制,旋转3D地图可禁用或开启开启 地图手势开关

地图手势可以通过UiSetting类提供的接口来控制禁用或启用。
UiSetting类中获取地图手势是否可用的接口:
范例方法说明booleanisScrollGesturesEnabled()获取当前是否支持滚动手势booleanisZoomGesturesEnabled()获取当前是否支持缩放手势booleanisTiltGesturesEnabled()获取当前是否支持倾斜手势booleanisRotateGesturesEnabled()获取当前是否支持旋转手势 UiSetting类中设置地图手势是否可用的接口:
范例方法说明voidsetFlingGestureEnabled(boolean flag)设置是否开启地图滑动手势voidsetScrollGesturesEnabled(boolean flag)设置是否开启地图滚动手势voidsetZoomGesturesEnabled(boolean flag)设置是否开启地图缩放手势voidsetTiltGesturesEnabled(boolean flag)设置是否开启地图倾斜手势voidsetRotateGesturesEnabled(boolean flag)设置是否开启地图旋转手势voidsetAllGesturesEnabled(boolean flag)设置是否开启地图所有手势 地图手势事件

TencentMap类地图手势事件监听接口:
范例方法说明voidsetOnMapClickListener(TencentMap.OnMapClickListener onMapClickListener)设置地图点击事件的监听接口voidsetOnMapLongClickListener(TencentMap.OnMapLongClickListener onMapLongClickListener)设置地图长按事件的监听接口voidaddTencentMapGestureListener(TencentMapGestureListener listener)添加一个腾讯地图手势监听接口voidremoveTencentMapGestureListener(TencentMapGestureListener listener)移除一个腾讯地图手势监听接口 当地图被点击时回调接口

  1. // 当地图被点击时回调接口
  2. public interface OnMapClickListener {
  3.     /**
  4.      * 当地图被点击时的回调函数
  5.      * @param latlng 点击点的经纬度
  6.      */
  7.     void onMapClick(LatLng latlng);
  8. }
复制代码
当地图被长按时回调接口

  1. // 当地图被长按时回调接口
  2. public interface OnMapLongClickListener {
  3.     /**
  4.      * 当地图被长按时的回调函数
  5.      * @param latlng 按住点的经纬度
  6.      */
  7.     void onMapLongClick(LatLng latlng);
  8. }
复制代码
地图手势识别的回调

  1. // 地图手势识别的回调
  2. public interface TencentMapGestureListener {
  3.     /**
  4.      * 单指双击
  5.      * @param x 像素 x坐标
  6.      * @param y 像素 y坐标
  7.      * @return
  8.      */
  9.     boolean onDoubleTap(float x, float y);
  10.     /**
  11.      * 单指单击
  12.      * @param x 像素 x坐标
  13.      * @param y 像素 y坐标
  14.      * @return
  15.      */
  16.     boolean onSingleTap(float x, float y);
  17.     /**
  18.      * 单指惯性滑动
  19.      * @param velocityX 惯性滑动的水平速度
  20.      * @param velocityY 惯性滑动的垂直速度
  21.      * @return
  22.      */
  23.     boolean onFling(float velocityX, float velocityY);
  24.     /**
  25.      * 单指滑动
  26.      * @param distanceX 滑动的水平距离
  27.      * @param distanceY 滑动的垂直距离
  28.      * @return
  29.      */
  30.     boolean onScroll(float distanceX, float distanceY);
  31.     /**
  32.      * 长按
  33.      * @param x 像素 x坐标
  34.      * @param y 像素 y坐标
  35.      * @return
  36.      */
  37.     boolean onLongPress(float x, float y);
  38.     /**
  39.      * 单指按下
  40.      * @param x 像素 x坐标
  41.      * @param y 像素 y坐标
  42.      * @return
  43.      */
  44.     boolean onDown(float x, float y);
  45.     /**
  46.      * 单指抬起
  47.      * @param x 像素 x坐标
  48.      * @param y 像素 y坐标
  49.      * @return
  50.      */
  51.     boolean onUp(float x, float y);
  52.     /**
  53.      * 地图稳定下来
  54.      */
  55.     void onMapStable();
  56. }
复制代码
地图状态

地图状态类

CameraPosition类界说了地图的状态,如中心点经纬度,缩放级别,旋转角度,俯视角度等。
范例方法说明LatLngtarget目标经纬度floatzoom缩放级别floatbearing旋转角度floattilt倾斜角度 CameraPosition类中的方法:
范例方法说明-CameraPosition(LatLng latlng, float zoomLevel, float skew, float rotate)构造一个 CameraPositionstatic CameraPositionfromLatLngZoom(LatLng latlng, float zoomLevel)创建一个 CameraPositionstatic CameraPosition.Builderbuilder()创建一个 CameraPosition.Builderstatic CameraPosition.Builderbuilder(CameraPosition cameraposition)由一个 CameraPosition 对象创建一个 CameraPosition.Builder 地图状态构造类

CameraPosition.Builder类创建一个CameraPosition的位置。
范例方法说明CameraPosition.Buildertarget(LatLng latlng)地图目标经纬度CameraPosition.Builderzoom(float zoomLevel)地图的目标缩放级别CameraPosition.Builderbearing(float rotate)旋转角度CameraPosition.Buildertilt(float skew)倾斜角度CameraPositionbuild()构造一个CameraPosition 对象。 地图状态更新类

CameraUpdate类描述地图状态将要发生的变化。
通过CameraUpdateFactory类构建地图缩放品级、地图显树模围,改变地图中心点等地图更新实例。
范例方法说明static CameraUpdatenewCameraPosition(CameraPosition cameraposition)由一个CameraPosition来天生新的状态变化对象static CameraUpdatenewLatLng(LatLng latlng)天生一个把地图移动到指定的经纬度到屏幕中心的状态变化对象static CameraUpdatenewLatLngBounds(LatLngBounds latlngbounds, int padding)把地图移到到以指定的经纬度范围的,并且在这个范围附近加上padding像素的添补。static CameraUpdatenewLatLngBoundsRect(LatLngBounds latlngbounds, int leftPadding, int rightPadding, int topPadding, int bottomPadding)把地图移动到指定经纬度范围,以适应当前屏幕的显示,并且可以为上下左右分别设置添补的像素static CameraUpdatenewLatLngBoundsWithMapCenter(LatLngBounds latLngBounds, LatLng mapCenter, int padding)以mapCenter为中心,将latLngBounds对应的地区刚好缩放到可视地区内,并且在这个范围附近加上padding像素添补static CameraUpdatenewLatLngZoom(LatLng latlng, float zoom)把地图以latlng为中心,以zoom为缩放级别,移到屏幕中心static CameraUpdaterotateTo(float rotate, float skew)将地图顺时针旋转rotate度,并且向后倾斜skew度static CameraUpdatescrollBy(float xPixel, float yPixel)将地图向左下移动xPixel和yPexil像素static CameraUpdatezoomBy(float zoomLevelDelta)在当前的缩放级别下,把缩放级别变化zoomLevelDelta,如果超出了范围,则停止在范围内static CameraUpdatezoomBy(float zoomLevelDelta, android.graphics.Point point)在当前的缩放级别下,把缩放级别变化zoomLevelDelta,如果超出了范围,则停止在范围内 注:由于依赖于MapView的尺寸,所以在onCreate中直接调用会有题目,可以放在OnMapLoadedCallback中调用static CameraUpdatezoomIn()把地图放大一级 注:执行放zoomIn操作必要获取当前地图状态,如果必须要在onCreate中调用,必要放在OnMapLoadedCallback中执行。static CameraUpdatezoomOut()把地图缩小一级 注:执行放zoomOut操作必要获取当前地图状态,如果必须要在onCreate中调用,必要放在OnMapLoadedCallback中执行。static CameraUpdatezoomTo(float zoomLevel)把地图缩放到目标级别 改变地图状态接口

TencentMap类中改变地图状态和设置地图状态监听的接口:
范例方法说明voidmoveCamera(CameraUpdate cameraUpdate)把地图变动到指定的状态voidanimateCamera(CameraUpdate cameraUpdate)把地图变动到指定的状态,带动画voidanimateCamera(CameraUpdate cameraUpdate, long duration, TencentMap.CancelableCallback cancelableCallback)以动画的方式把地图变动到指定的状态voidanimateCamera(CameraUpdate cameraUpdate, TencentMap.CancelableCallback cancelableCallback)以动画的方式把地图变动到指定的状态voidsetOnCameraChangeListener(TencentMap.OnCameraChangeListener onCameraChangeListener)设置地图变动的监听接口 当地图发生变化时的调用接口

  1. // 当地图发生变化时的调用接口
  2. public interface OnCameraChangeListener {
  3.     /**
  4.      * 地图状态发生变化
  5.      * @param cameraPosition 地图当前的状态对象
  6.      */
  7.     void onCameraChange(CameraPosition cameraPosition);
  8.     /**
  9.      * 地图状态变化结束
  10.      * @param cameraPosition 地图当前的状态对象
  11.      */
  12.     void onCameraChangeFinished(CameraPosition cameraPosition);
  13. }
复制代码
地图变动相关操作的状态回调接口

  1. // 地图变换相关操作的状态回调接口
  2. public interface CancelableCallback {
  3.     /**
  4.      * 地图变换结束
  5.      */
  6.     void onFinish();
  7.     /**
  8.      * 地图变换被取消
  9.      */
  10.     void onCancel();
  11. }
复制代码
限制地图显树模围和缩放级别

腾讯地图 SDK 支持将地图限制在指定的经纬度范围内,即只能在肯定地区内缩放、移动地图视野。
显树模围适配模式

常量说明FIT_HEIGHT此模式会以 bounds 高度为参考值限制地图的控制地区,在最小限制级别时 bounds 的横向地区大概显示不完备, 可调用 TencentMap.setMinZoomLevel(int) 修改最小限制级别以展示完备的地区FIT_WIDTH此模式会以 bounds 宽度为参考值限制地图的控制地区,在最小限制级别时 bounds 的纵向地区大概显示不完备, 可调用 TencentMap.setMinZoomLevel(int) 修改最小限制级别以展示完备的地区 接口

TencentMap类中限制地图显树模围和缩放级别的接口:
范例方法说明voidsetRestrictBounds(LatLngBounds restrictBounds, RestrictBoundsFitMode fitMode)限制地图的显树模围。floatgetMaxZoomLevel()获取地图最大的支持的缩放级别floatgetMinZoomLevel()获取地图最小的支持的缩放级别voidsetMaxZoomLevel(int zoomLevel)设置地图的最大缩放级别voidsetMinZoomLevel(int zoomLevel)设置地图的最小缩放级别

  • 说明:限制地图的显树模围。此接口同时会限制地图的最小缩放整数级别,用户还可以通过 setMinZoomLevel(int) 修改自己必要的最小缩放级别获取必要的展示效果。这个方法只有在 OnMapLoadedCallback 回调后才气正常使用。
地图事件

TencentMap类中加载完成和渲染完成的接口:
范例方法说明voidaddOnMapLoadedCallback(TencentMap.OnMapLoadedCallback onMapLoadedCallback)设置地图加载完成回调接口voidsetOnMapFrameFinished(TencentMap.OnMapFrameFinishCallback onMapFrameFinished)设置地图渲染帧回调 ##地图加载完成的回调接口
  1. // 地图加载完成的回调接口,设置之后只回调一次,如果需要再获取,则需要重新设置回调
  2. public interface OnMapLoadedCallback {
  3.     /**
  4.      * 地图加载完成回调函数
  5.      */
  6.     void onMapLoaded();
  7. }
复制代码
地图完成首屏渲染回调接口

  1. // 地图完成首屏渲染回调,仅依赖当前资源的渲染完成
  2. public interface OnMapFrameFinishCallback {
  3.     /**
  4.      * 地图渲染首屏开始
  5.      */
  6.     void onMapFrameStart();
  7.     /**
  8.      * 地图渲染首屏完成
  9.      */
  10.     void onMapFrameFinished();
  11. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

魏晓东

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表