首页 > 其他分享 >高德地图SDK Android版开发 5 地图交互操作

高德地图SDK Android版开发 5 地图交互操作

时间:2024-08-15 19:53:15浏览次数:15  
标签:缩放 float 地图 接口 设置 Android 手势 高德

高德地图SDK Android版开发 5 地图交互操作

前言

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

  • 高德地图支持多种地图交互操作,用户可以通过手势或控件进行地图操作,以实现更好的地图浏览体验。另一方面开发者通过代码实现特定业务场景的地图交互。

  • 高德地图通过设定不同的地图状态,来改变地图视野。

  • 最后是不属于地图操作的地图事件,但是也很重要。

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

控件

控件介绍

高德地图提供一些基础的地图控件,包括LOGO、指南针、比例尺和缩放按钮和定位按钮。

控件功能默认显示默认位置
LOGO可设置显示相对位置和边距
(左下角,底部居中,右下角)
显示左下角
指南针设置是否显示不显示左上角
比例尺设置是否显示不显示左下角
缩放按钮设置是否显示,可设置显示相对位置
(地图右边居中、地图右下角)
显示右下角
定位按钮设置是否显示不显示右上角

接口

UiSettings

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

类型方法说明
intgetLogoPosition()获取“高德地图”Logo的位置。
voidsetLogoPosition(int position)设置“高德地图”Logo的位置。
voidsetLogoLeftMargin(int pixels)设置Logo左边界距离屏幕左侧的边距。
voidsetLogoBottomMargin(int pixels)设置Logo下边界距离屏幕底部的边距。
booleanisCompassEnabled()返回指南针控件是否可见。
voidsetCompassEnabled(boolean enabled)设置指南针是否可见。
booleanisScaleControlsEnabled()返回比例尺控件是否可见。
voidsetScaleControlsEnabled(boolean enabled)设置比例尺控件是否可见
booleanisZoomControlsEnabled()返回缩放按钮是否可见。
voidsetZoomControlsEnabled(boolean enabled)设置缩放按钮是否可见。
intgetZoomPosition()获取缩放按钮的位置。
voidsetZoomPosition(int position)设置缩放按钮的位置。
booleanisMyLocationButtonEnabled()返回定位按钮是否可见。
voidsetMyLocationButtonEnabled(boolean enabled)设置定位按钮是否可见。

AMapOptions

AMapOptions中的控件常量:

常量说明
LOGO_POSITION_BOTTOM_LEFTLogo位置(地图左下角)
LOGO_POSITION_BOTTOM_CENTERLogo位置(地图底部居中)
LOGO_POSITION_BOTTOM_RIGHTLogo位置(地图右下角)
LOGO_MARGIN_LEFTLOGO边缘MARGIN(左边)
LOGO_MARGIN_RIGHTLOGO边缘MARGIN(右边)
LOGO_MARGIN_BOTTOMLOGO边缘MARGIN(底部)
ZOOM_POSITION_RIGHT_CENTER缩放按钮位置常量(地图右边居中)
ZOOM_POSITION_RIGHT_BUTTOM缩放按钮位置常量(地图右下角)

示例代码

通过 AMap 类实现UiSettings 类对象的实例化:

UiSettings uiSettings = map.getUiSettings();

Logo

// 获取Logo位置
int position = uiSettings.getLogoPosition();
// 设置Logo位置
position = AMapOptions.LOGO_POSITION_BOTTOM_RIGHT;
uiSettings.setLogoPosition(position);

uiSettings.setLogoLeftMargin(10);
uiSettings.setLogoBottomMargin(10);

指南针

// 获取是否允许指南针
// boolean enabled = uiSettings.isCompassEnabled();
// 设置是否允许指南针
uiSettings.setCompassEnabled(true);

比例尺

// 获取比例尺控件是否显示
// boolean isShow = uiSettings.isScaleControlsEnabled();
// 设置是否显示比例尺控件
uiSettings.setScaleControlsEnabled(true);

缩放按钮

// boolean isShow = uiSettings.isZoomControlsEnabled();
// 设置缩放按钮是否可见
uiSettings.setZoomControlsEnabled(true);

// int position = uiSettings.getZoomPosition();
int position = AMapOptions.ZOOM_POSITION_RIGHT_CENTER;
uiSettings.setZoomPosition(position);

效果图

在这里插入图片描述

地图手势

提供了多种手势供户与地图之间进行交互,如平移、滑动、缩放、旋转、倾斜。

地图手势方法说明

手势说明状态开关默认
滑动手势1. 可以用手指拖动地图四处滚动(平移)
2. 用手指滑动地图(动画效果)
可禁用或开启开启
缩放手势缩放手势可改变地图的缩放级别。
1. 双击地图可以使缩放级别增加1 (放大);
2. 两个手指捏/拉伸。
可禁用或开启开启
旋转手势可以用两个手指在地图上转动,旋转3D矢量地图可禁用或开启开启
倾斜手势可以在地图上放置两个手指,移动它们一起向下或向上,增加或减小倾斜角可禁用或开启开启
指定屏幕中心点的手势操作在对地图进行手势操作(滑动手势除外)时,可以指定屏幕中心点后执行相应手势。可禁用或开启禁用

地图手势开关

地图手势可以通过UiSetting类提供的接口来控制禁用或启用。

UiSetting类中获取地图手势是否可用的接口:

类型方法说明
booleanisScrollGesturesEnabled()返回拖拽手势是否可用。
booleanisZoomGesturesEnabled()返回缩放手势是否可用。
booleanisRotateGesturesEnabled()返回旋转手势是否可用。
booleanisTiltGesturesEnabled()返回倾斜手势是否可用。
booleanisGestureScaleByMapCenter()返回是否以地图中心点缩放

UiSetting类中设置地图手势是否可用的接口:

类型方法说明
voidsetZoomGesturesEnabled(boolean enabled)设置双指缩放手势是否可用。
voidsetScrollGesturesEnabled(boolean enabled)设置拖拽手势是否可用。
voidsetRotateGesturesEnabled(boolean enabled)设置旋转手势是否可用。
voidsetTiltGesturesEnabled(boolean enabled)设置倾斜手势是否可用。
voidsetGestureScaleByMapCenter(boolean isGestureScaleByMapCenter)设置是否以地图中心点缩放。
注:优先级低于 AMap.setPointToCenter(int x, int y)
voidsetAllGesturesEnabled(boolean enabled)设置所有手势是否可用

指定屏幕中心点的手势操作

在对地图进行手势操作时(滑动手势除外),可以指定屏幕中心点后执行相应手势。

AMap类指定屏幕中心点的方法:

// x、y均为屏幕坐标,屏幕左上角为坐标原点,即(0,0)点。
map.setPointToCenter(x, y);

开启以中心点进行手势操作的方法:

uiSettings.setGestureScaleByMapCenter(true);

地图手势事件

AMap类地图手势事件监听接口:

类型方法说明
voidsetOnMapClickListener(AMap.OnMapClickListener listener)设置地图点击事件监听接口。
voidsetOnMapLongClickListener(AMap.OnMapLongClickListener listener)设置地图长按事件监听接口。
voidsetOnMapTouchListener(AMap.OnMapTouchListener listener)设置地图触摸事件监听接口。
voidsetAMapGestureListener(AMapGestureListener listener)设置手势监听接口

地图点击事件监听接口

// 地图点击事件监听接口
public interface OnMapClickListener {
    /**
     * 当用户点击地图时回调此方法,如果点击在某个覆盖物(如marker、polyline)上,且处理了该点击事件,则不会回调此方法。
     * @param point 用户所点击的地理坐标
     */
    void onMapClick(LatLng point);
}

地图长按事件监听接口

// 地图长按事件监听接口
public interface OnMapLongClickListener {
    /**
     * 当用户长按地图时回调此方法,如果长按时触发某一个marker对象的拖动事件,则不会回调此方法。
     * @param point 用户长按的地理坐标
     */
    void onMapLongClick(LatLng point);
}

地图触摸事件监听接口

// 地图触摸事件监听接口
public interface OnMapTouchListener {
    /**
     * 当用户触摸地图时回调此方法
     * @param motionEvent 触摸事件
     */
    void onTouch(MotionEvent motionEvent);
}

地图手势识别的回调

// 地图手势识别的回调,包含单双击、滑动等以及地图操作地图后稳定下来的回调
public interface AMapGestureListener {
    /**
     * 双击
     * @param x 像素 x坐标
     * @param y 像素 y坐标
     */
    void onDoubleTap(float x, float y);

    /**
     * 单击
     * @param x 像素 x坐标
     * @param y 像素 y坐标
     */
    void onSingleTap(float x, float y);

    /**
     * 惯性滑动
     * @param velocityX 惯性滑动的水平速度
     * @param velocityY 惯性滑动的垂直速度
     */
    void onFling(float velocityX, float velocityY);

    /**
     * 滑动
     * @param distanceX 滑动的水平距离
     * @param distanceY 滑动的垂直距离
     */
    void onScroll(float distanceX, float distanceY);

    /**
     * 长按
     * @param x 像素 x坐标
     * @param y 像素 y坐标
     */
    void onLongPress(float x, float y);

    /**
     * 按下
     * @param x 像素 x坐标
     * @param y 像素 y坐标
     */
    void onDown(float x, float y);

    /**
     * 抬起
     * @param x 像素 x坐标
     * @param y 像素 y坐标
     */
    void onUp(float x, float y);

    /**
     * 地图稳定下来会回到此接口
     */
    void onMapStable();
}

地图状态

地图状态类

CameraPosition类定义了地图的状态,如中心点经纬度,缩放级别,旋转角度,俯视角度等。

类型方法说明
LatLngtarget目标位置的屏幕中心点经纬度坐标。
floatzoom目标可视区域的缩放级别。
floatbearing可视区域指向的方向,以角度为单位,从正北向逆时针方向计算,从0 度到360 度。
floattilt目标可视区域的倾斜度,以角度为单位。
booleanisAbroad该位置是否在国内(此属性不是精确计算,不能用于边界区域)

CameraPosition类中的方法:

类型方法说明
-CameraPosition(LatLng target, float zoom, float tilt, float bearing)构造一个CameraPosition 对象。
static CameraPosition.Builderbuilder()创建一个CameraPosition.Builder 对象
static CameraPosition.Builderbuilder(CameraPosition camera)根据传入的CameraPosition 创建一个CameraPosition.Builder 对象。
static CameraPositionfromLatLngZoom(LatLng target, float zoom)根据传入的经纬度、缩放级别构造一个CameraPosition 对象。

地图状态构造类

CameraPosition.Builder类创建一个摄像机的位置。

类型方法说明
-Builder()构造一个新的CameraPosition对象。
-Builder(CameraPosition previous)根据给定的参数构造一个CameraPosition的新对象。
CameraPosition.Buildertarget(LatLng location)设置目标位置的地图中心点经纬度坐标。
CameraPosition.Builderzoom(float zoom)设置目标可视区域的缩放级别。
CameraPosition.Builderbearing(float bearing)设置可视区域的旋转方向,以角度为单位,正北方向到地图方向逆时针旋转的角度,范围从0度到360度
CameraPosition.Buildertilt(float tilt)设置目标可视区域的倾斜度
CameraPositionbuild()构造一个CameraPosition 对象。

地图状态更新类

CameraUpdate类描述地图状态将要发生的变化。

通过CameraUpdate类构建地图缩放等级、地图显示范围,改变地图中心点等地图更新实例。

类型方法说明
static CameraUpdatechangeBearing(float bearing)设置地图的旋转角度。
static CameraUpdatechangeLatLng(LatLng latLng)设置地图的中心点。
static CameraUpdatechangeTilt(float tilt)设置地图倾斜度。
static CameraUpdatenewCameraPosition(CameraPosition cameraPosition)给地图设置一个新的状态。
static CameraUpdatenewLatLng(LatLng latLng)设置地图的中心点。
static CameraUpdatenewLatLngBounds(LatLngBounds bounds, int padding)设置显示在规定屏幕范围内的地图经纬度范围。
static CameraUpdatenewLatLngBounds(LatLngBounds bounds, int width, int height, int padding)设置显示在规定宽高中的地图经纬度范围。
static CameraUpdatenewLatLngBoundsRect(LatLngBounds latlngbounds, int paddingLeft, int paddingRight, int paddingTop, int paddingBottom)设置显示在规定屏幕范围内的地图经纬度范围。
static CameraUpdatenewLatLngZoom(LatLng latLng, float zoom)设置地图中心点以及缩放级别。
static CameraUpdatescrollBy(float xPixel, float yPixel)按像素移动地图中心点
static CameraUpdatezoomBy(float amount)根据给定增量缩放地图级别,在当前地图显示的级别基础上加上这个增量。
static CameraUpdatezoomBy(float amount, android.graphics.Point focus)根据给定增量并以给定的屏幕像素点为中心点缩放地图级别。
static CameraUpdatezoomIn()放大地图缩放级别,在当前地图显示的级别基础上加1。
static CameraUpdatezoomOut()缩小地图缩放级别,在当前地图显示的级别基础上减1。
static CameraUpdatezoomTo(float zoom)设置地图缩放级别。

改变地图状态接口

AMap类中改变地图状态和设置地图状态监听的接口:

类型方法说明
CameraPositiongetCameraPosition()获取地图的当前状态。
voidmoveCamera(CameraUpdate update)按照传入的CameraUpdate参数改变地图状态。
voidanimateCamera(CameraUpdate update)以动画方式按照传入的CameraUpdate参数更新地图状态,
默认动画耗时250毫秒。
voidanimateCamera(CameraUpdate update, AMap.CancelableCallback cancelableCallback)以动画方式按照传入的CameraUpdate参数更新地图状态,
默认动画耗时250毫秒,
同时设置一个cancelableCallback来监听动画执行的结果。
voidanimateCamera(CameraUpdate update, long durationMs, AMap.CancelableCallback cancelableCallback)按照指定的动画时长及传入的CameraUpdate参数更新地图状态,
同时设置一个cancelableCallback来监听动画执行的结果。
voidsetOnCameraChangeListener(AMap.OnCameraChangeListener listener)设置地图状态的监听接口。

地图状态发生变化的监听接口

// 地图状态发生变化的监听接口
public interface OnCameraChangeListener {
    /**
     * 在地图状态改变过程中回调此方法
     * @param position 一个cameraPosition对象,表示地图的当前状态。
     */
    void onCameraChange(CameraPosition position);

    /**
     * 在地图状态改变完成时回调此方法
     * @param position 一个cameraPosition对象,表示地图的当前状态。
     */
    void onCameraChangeFinish(CameraPosition position);
}

监听改变地图状态是否执行完成或者被中断的接口

// 在AMap.animateCamera(CameraUpdate, CancelableCallback)设置一个CancelableCallback,用来监听该CameraUpdate是否执行完成或者被中断。
public interface CancelableCallback {
    /**
     * 当CameraUpdate任务完成时回调此方法。
     */
    void onFinish();

    /**
     * 当CameraUpdate任务被中断时回调此方法。
     */
    void onCancel();
}

限制地图显示范围和缩放级别

AMap类中限制地图显示范围的接口:

类型方法说明
voidsetMapStatusLimits(LatLngBounds latLngBounds)设置地图显示范围,无论如何操作地图,显示区域都不能超过该矩形区域。

AMap类中限制缩放级别的接口:

类型方法说明
voidsetMaxZoomLevel(float zoomLevel)设置地图最大缩放级别 缩放级别范围为[3, 20],超出范围将按最大级别计算 。
voidsetMinZoomLevel(float zoomLevel)设置最小缩放级别 缩放级别范围为[3, 20],超出范围将按最小级别计算
floatgetMaxZoomLevel()返回地图可显示最大缩放级别。
floatgetMinZoomLevel()返回地图可显示最小缩放级别。
voidresetMinMaxZoomPreference()重置最小及最大缩放级别 将恢复最小级别为3,最大级别为20 。

改变地图默认显示区域

地图默认显示北京地区,通过采用重载的MapView构造方法更改默认地图显示区域:

MapView mapView = new MapView(this, mapOptions);

代码实现片段:

// 定义北京市经纬度坐标(此处以北京坐标为例)
LatLng centerBJPoint= new LatLng(39.904989,116.405285);
// 定义了一个配置 AMap 对象的参数类
AMapOptions mapOptions = new AMapOptions();
// 设置了一个可视范围的初始化位置
// CameraPosition 第一个参数: 目标位置的屏幕中心点经纬度坐标。
// CameraPosition 第二个参数: 目标可视区域的缩放级别
// CameraPosition 第三个参数: 目标可视区域的倾斜度,以角度为单位。
// CameraPosition 第四个参数: 可视区域指向的方向,以角度为单位,从正北向顺时针方向计算,从0度到360度
mapOptions.camera(new CameraPosition(centerBJPoint, 10f, 0, 0));
// 定义一个 MapView 对象,构造方法中传入 mapOptions 参数类
MapView mapView = new MapView(this, mapOptions);
// 调用 onCreate方法 对 MapView LayoutParams 设置
mapView.onCreate(savedInstanceState);

地图事件

AMap类中加载完成的接口:

类型方法说明
voidsetOnMapLoadedListener(AMap.OnMapLoadedListener listener)设置地图加载完成监听接口

地图加载完成监听接口

// 地图加载完成监听接口
public interface OnMapLoadedListener {
    /**
     * 当地图加载完成后回调此方法
     */
    void onMapLoaded();
}

标签:缩放,float,地图,接口,设置,Android,手势,高德
From: https://blog.csdn.net/kikikiki001/article/details/141223291

相关文章

  • 百度地图SDK Android版开发 5 地图交互操作
    百度地图SDKAndroid版开发5地图交互操作前言控件控件介绍接口MapViewBaiduMapUiSettingsLogoPosition示例代码Logo指南针比例尺缩放按钮地图上控件边距效果图地图手势地图手势方法说明地图手势开关接口地图手势事件地图单击事件监听接口地图双击事件监听接口地图长......
  • Android面试中Service夺命六小问
    1、请解释一下Android中的Service以及它的用途。Service是Android中的四大组件之一,它可以在后台执行长时间运行的操作,而不需要与用户进行交互。它主要用于执行一些不需要用户界面的任务,例如播放音乐、下载文件、同步数据等。Service有以下几个特点:后台运行:Service......
  • 如何为微信小程序添加地图和位置服务
    为微信小程序添加地图和位置服务可以通过使用微信提供的地图组件和位置API实现。以下是详细步骤和示例代码:创建一个新的微信小程序项目:使用微信开发者工具创建一个新的微信小程序项目。在创建项目时,可以选择"位置"和"地图"权限,以便后续使用位置和地图服务。在小程序......
  • uni-app使用天地图
    原因:由于主流地图(百度,高德,腾讯)商用收费属实昂贵,不得已很多人开始转战天地图。  方案:天地图想要在uniapp项目中正常使用目前的方案有两种1.通过web-view将html天地图嵌入项目中  优点:可以同时兼容微信小程序和APP缺点:地图嵌入后数据交互繁琐,小程序兼容了,但是兼的不是很......
  • React 高德地图 进京证 路线规划 问题小记
    一、加载问题用高德地图做了个进京证路线规划的功能,官网也是有React代码示例。但是吧,这个Demo有问题,地图是能加载成功,但是其他功能再用map这个变量肯定不行,果不其然是null,处理也简单,把公共变量都管理起来就行了。const[map,setMap]=useState(null);const[AMap,setAMa......
  • Android笔试面试题AI答之Kotlin(6)
    文章目录24.以下代码执行的结果是什么?25.解释一下下述Kotlin代码有什么问题?26.如何在Kotlin中创建常量?示例注意事项总结27.Koltin可以互换使用IntArray和Kotlin中的Array吗?IntArrayArray<Int>互换使用从IntArray到Array<Int>从Array<Int>到IntArra......
  • Android SDK 遇到的坑之讯飞语音合成
    目录一、讯飞在线语音合成二、组件未安装.(错误码:21002)2.1Android10错误信息2.2Android13错误信息三、错误分析    3.1没有使用SpeechUtility.createUtility()设置appid  3.2 没有将libmsc.so放到工程中往期推荐一、讯飞在线语音合成   ......
  • Qt/C++地图坐标纠偏/地球坐标系/火星坐标系/百度坐标系/互相转换/离线函数
    一、前言说明为什么需要地球坐标纠偏这个功能,因为国家安全需要,不允许使用国际标准的地球坐标系,也并不是咱们这边这样,很多国家都是这样处理的,就是本国的地图经纬度坐标都是按照国家标准来的,所以就需要一个转换。国内主要有三种坐标系,国际标准用的地球坐标系WGS-84,国家标准用的火星......
  • Android10.0 最近任务Recents功能分析
    在Android10.0上,Recents功能分布在SystemUI和Launcher3里面集成.一.初始化跟Android8.1类似,先看初始化入口:1.Recents.javaRecents继承SystemUI,进程启动后会在Dependency里面通过@Inject进行初始化,然后在SystemUIService里面调用SystemUIApplication的startServicesIfNee......
  • Android HWUI
    AndroidHWUI(HardwareAcceleratedRenderingEngineforUI)是Android系统中用于处理UI渲染的硬件加速引擎。它的主要作用是利用GPU(图形处理单元)来加速UI的渲染过程,从而提高渲染效率和流畅度。以下是AndroidHWUI工作的主要方式和步骤: 一、基本工作原理传统软件的UI绘制是依靠......