大型情感类电视连续剧--Android高德之旅(3)地图交互
总要说两句
前两篇讲到了地图的基础显示和地图类型,今天来记录下高德地图交互相关的设置。地图的绘制分很多层,层级的显示需要根据不同的场景来设置。地图的触摸事件也很丰富,有单击、双击、单指拖拽、双指拖拽、双指旋转、双指缩放等,高德提供了api来设置这些用户交互。
除了这些设置外,还包含地图截图,这也算是用户交互。好了,废话不多说,开始今天的Android高德之旅,筒子们,老司机要开车了,上车吧。
(博客中所有的gif都是确定没问题的,如果在你的浏览器中看不了,就把gif下载下来看)
开车
先来看一张图,这是默认的样子
这里写图片描述
显示设置
1、交通图层
AMap aMap = mapView.getMap();
aMap.setTrafficEnabled(true);
1
2
这样就可以开启交通图层,高亮显示交通线路。
这里写图片描述
2、我的位置图层
AMap aMap = mapView.getMap();
aMap.setLocationSource(new LocationSource() {
@Override
public void activate(OnLocationChangedListener onLocationChangedListener) {
mListener = onLocationChangedListener;
if (mlocationClient == null) {
mlocationClient = new AMapLocationClient(this);
mLocationOption = new AMapLocationClientOption();
mlocationClient.setLocationListener(new AMapLocationListener() {
@Override
public void onLocationChanged(AMapLocation aMapLocation) {
if (mListener != null && aMapLocation != null) {
if (aMapLocation.getErrorCode() == 0) {
mListener.onLocationChanged(aMapLocation);
} else {
Log.e("TAG", aMapLocation.getErrorCode());
}
}
}
});
mLocationOption.setLocationMode(
AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
mlocationClient.setLocationOption(mLocationOption);
mlocationClient.startLocation();
}
}
@Override
public void deactivate() {
mListener = null;
if (mlocationClient != null) {
mlocationClient.stopLocation();
mlocationClient.onDestroy();
}
mlocationClient = null;
}
}); // 设置激活/关闭定位的监听
aMap.getUiSettings().setMyLocationButtonEnabled(b); //在地图上标注我的位置
aMap.setMyL www.lafei333.cn ocationEnabled(b); //显示定位层并可触发定位
aMap.setMyLocationType(AMap.LOCATION_TYPE_MAP_FOLLOW); //总共有三种模式,定位,跟随和旋转
1www.sratchina.com
www.boyuanyl.cn
www.gouyifl.cn
www.gouyiflb.cn
www.gouyily.cn
www.boshenyl.cn
www.fanboyl.cn/
www.longboshyl.cn
www.feishenbo.cn
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
这里写图片描述
系统会显示蓝色箭头,为您当前所在位置,这个箭头有三种类型(如上显示),定位,跟随和旋转,下面展示一下旋转的效果。
这里写图片描述
主要看下activate回调中的最后一行代码:mlocationClient.startLocation();
此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,
注意设置合适的定位时间的间隔(最小间隔支持为1000ms),并且在合适时间调用stopLocation()方法来取消定位请求,在定位结束后,在合适的生命周期调用onDestroy()方法。
最小时间间隔设置:
mLocationOption.setInterval(1000);
1
关于这个,官方文档写的是2000,但是看源码里写的是1000。
public AMapLocationClientOption setInterval(long var1) {
if(var1 < 1000L) {
var1 = 1000L;
}
this.b = var1;
return this;
}
1
2
3
4
5
6
7
3、指南针:在左上角显示
mUiSettings = aMap.getUiSettings();
mUiSettings.setCompassEnabled(true);
1
2
这里写图片描述
4、比例尺:在左下角显示
mUiSettings = aMap.getUiSettings();
mUiSettings.setScaleControlsEnabled(true);
1
2
这里写图片描述
5、缩放控件:右下角
mUiSettings = aMap.getUiSettings();
mUiSettings.setZoomControlsEnabled(true);
1
www.lieqibiji.com/
www.myqunliphoto.com/
www.yyzx66.cn/ 易赢在线
www.hsl85.cn/
2
这里写图片描述
这个位置不是固定的,可以设置
mUiSettings.setZoomPosition(AMapOptions.ZOOM_POSITION_RIGHT_BUTTOM)
mUiSettings.setZoomPosition(AMapOptions.ZOOM_POSITION_RIGHT_CENTER)
1
2
6、设置logo位置:默认在左下角
mUiSettings = aMap.getUiSettings();
mUiSetting.setLogoPosition(int);
1
2
这里写图片描述
这个logo是不可以去掉的,必须显示,因为毕竟你用别人的SDK,总得把别人体现出来。
系统提供了6种logo的位置:
mUiSettings.setLogoPosition(AMapOptions.LOGO_MARGIN_LEFT);
mUiSettings.setLogoPosition(AMapOptions.LOGO_MARGIN_BOTTOM);
mUiSettings.setLogoPosition(AMapOptions.LOGO_MARGIN_RIGHT);
mUiSettings.setLogoPosition(AMapOptions.LOGO_POSITION_BOTTOM_LEFT);
mUiSettings.setLogoPosition(AMapOptions.LOGO_POSITION_BOTTOM_RIGHT);
mUiSettings.setLogoPosition(AMapOptions.LOGO_POSITION_BOTTOM_CENTER);
1
2
3
4
5
6
但是实际运行后发现,6个值只有三个位置。
LOGO_MARGIN_LEFT 和 LOGO_POSITION_BOTTOM_LEFT是一样的
LOGO_MARGIN_RIGHT 和 LOGO_POSITION_BOTTOM_RIGHT是一样的
LOGO_MARGIN_BOTTOM 和 LOGO_POSITION_BOTTOM_CENTER是一样的
这就尴尬了~难道是我打开的方式不对嘛,知道的可以跟我说一下。
7、获取缩放比例
float scale = aMap.getScalePerPixel();
1
获取出来的这个scale单位是米/像素,也就是屏幕上一像素等于实际多少米
触控设置
1、滑动手势:是否可以单指滑动
mUiSettings.setScrollGesturesEnabled(false);
1
2、缩放手势:是否可以双指缩放
mUiSettings.setZoomGesturesEnabled(false);
1
3、倾斜手势:是否可以双指倾斜
mUiSettings.setTiltGesturesEnabled(false);
1
4、旋转手势:是否可以双指旋转
mUiSettings.setRotateGesturesEnabled(false);
1
5、所有手势开关
mUiSettings.setAllGesturesEnabled (false);
1
6、以上四个手势设置api,对应下面4个状态获取api
UiSettings.isRotateGesturesEnabled()
UiSettings.isZoomGesturesEnabled()
UiSettings.isScrollGesturesEnabled()
UiSettings.isTiltGesturesEnabled()
1
2
3
4
视角改变
大家还记得吗,第一篇最后,我们做了一个小效果,单击地图,地图定位到某个地方,然后视角倾斜60度,并且旋转90度。
代码时这样写的
aMap.animateCamera(
CameraUpdateFactory.newCameraPosition(new CameraPosition(
new LatLng(39.92463, 116.389139), //经纬度
18, //缩放级别 3 -19 3:最大视角,看到全中国,19:最小级别,看到细节
60, //倾斜
90) //旋转
),
1500,
new AMap.CancelableCallback() {
@Override
public void onFinish() {
}
@Override
public void onCancel() {
}
}
);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
调用aMap.animateCamera,这个过程就是动画形式的,还有另外一个api是没有动画的
aMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(
new LatLng(39.92463, 116.389139), //经纬度
18, //缩放级别 3 -19 3:最大视角,看到全中国,19:最小级别,看到细节
60, //倾斜
90) //旋转
));
1
2
3
4
5
6
结果和上面一样,只是这个api不会有动画,从方法名就能看出来。
两个api传入的参数都是CameraUpdate对象,表示更新相机位置(即视角位置)
CameraUpdateFactory.newCameraPosition()方法就是返回一个CameraUpdate子类对象
参数分别表示:新的经纬度、缩放级别、倾斜角度、旋转角度
我们来看一下最终效果
大型情感类电视连续剧--Android高德之旅(3)地图交互的更多相关文章
- 大型情感类电视连续剧--Android高德之旅(2)地图类型
总要说两句 今天继续我们的Android高德之旅,上一篇已经能够显示最主要的地图了.有主要的放大缩小功能.还有最后做的点击3D旋转.倾斜视角的效果.今天这篇文章来记录一下高德地图的5种地图类型. (其 ...
- Android的Bitmap和BitmapDrawable类解析-android学习之旅(六十)
使用简单图片 使用Drawable对象 bitmap和BitmapDrawable对象 package peng.liu.test; import android.app.Activity; impo ...
- 大型情感类技术连续剧-徒手撸一个 uTools(二)
前言 上篇手把手教你实现一个支持插件化的 uTools 工具箱我们介绍过了如何通过 electron 实现 utools 的插件功能体系,并按照 utools 的交互和设计做出了一套可以支持插件化的桌 ...
- 我的Android进阶之旅------>百度地图学习:BDLocation.getLocType ( )值分析
BDLocation类,封装了定位SDK的定位结果,在BDLocationListener的onReceive方法中获取.通过该类用户可以获取error code,位置的坐标,精度半径等信息.具体方法 ...
- Android开发之旅: Intents和Intent Filters(理论部分)
引言 大部分移动设备平台上的应用程序都运行在他们自己的沙盒中.他们彼此之间互相隔离,并且严格限制应用程序与硬件和原始组件之间的交互. 我们知道交流是多么的重要,作为一个孤岛没有交流的东西,一定毫无意义 ...
- 转:Android开发之旅:环境搭建及HelloWorld
http://www.cnblogs.com/skynet/archive/2010/04/12/1709892.html 引言 本系列适合0基础的人员,因为我就是从0开始的,此系列记录我步入Andr ...
- Android开发之旅:环境搭建及HelloWorld
引言 本系列适合0基础的人员,因为我就是从0开始的,此系列记录我步入Android开发的一些经验分享,望与君共勉!作为Android队伍中的一个新人的我,如果有什么不对的地方,还望不吝赐教. 在开始A ...
- Android 开发之旅:深入分析布局文件&又是“Hello World!”
http://www.cnblogs.com/skynet/archive/2010/05/20/1740277.html 引言 上篇可以说是一个分水岭,它标志着我们从Android应用程序理论进入实 ...
- 【转】Android开发之旅:环境搭建及HelloWorld
原文网址: http://www.cnblogs.com/skynet/archive/2010/04/12/1709892.html 引言 本系列适合0基础的人员,因为我就是从0开始的,此系列记录我 ...
随机推荐
- 佛山Uber优步司机奖励政策(2月1日~2月7日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- python Day 2 - 编写数据库模块
在一个Web App中,所有数据,包括用户信息.发布的日志.评论等,都存储在数据库中.在awesome-python-app中,我们选择MySQL作为数据库. Web App里面有很多地方都要访问数据 ...
- 【python自动化第五篇:python入门进阶】
今天内容: 模块的定义 导入方法 import的本质 导入优化 模块分类 模块介绍 一.模块定义: 用来在逻辑上组织python代码(变量,函数,逻辑,类):本质就是为了实现一个功能(就是以.py结尾 ...
- BSEG和BSIS、BSAS、BSID、BSAD、BSIK、BSAK六个表的关系(转)
BSEG和BSIS.BSAS.BSID.BSAD.BSIK.BSAK 六个表的关系 1.数据关系: BSAS+BSIS+BSAK+BSIK+BSAD+BSID = BSEG 2.六个表说明: clea ...
- 备忘--简单比较SPSS、RapidMiner、KNIME以及Kettle四款数据分析工具
SPSS.RapidMiner.KNIME以及Kettle四款工具都可以用来进行数据分析,只是彼此有各自的侧重点和有劣势.它们都可以逐步的定义数据分析过程,也同样都可以对数据进行ETL处理.笔者从自己 ...
- UVA Mapping the Swaps
题目例如以下: Mapping the Swaps Sorting an array can be done by swapping certain pairs of adjacent entrie ...
- android80 HttpClient框架提交数据 get方式
package com.itheima.httpclient; import java.io.IOException; import java.io.InputStream; import java. ...
- Linux块设备驱动 --块驱动相关的结构体及相关操作
http://blog.chinaunix.net/uid-23399063-id-70124.html
- [转] Putty - 文件夹显示的蓝色太暗
Putty SSH key的后缀为ppk 默认文件夹的颜色显示为ANSI Blue,颜色太暗. ANSI Blue : RGB(0, 0, 187) 将ANSI Blue修改为和ANSI Blue B ...
- android开发之merge结合include优化布局
merge结合include优化android布局,效果不知道,个人感觉使用上也有很大的局限,不过还是了解一下,记录下来. 布局文件都要有根节点,但android中的布局嵌套过多会造成性能问题,于是在 ...