总要说两句
  
  前两篇讲到了地图的基础显示和地图类型,今天来记录下高德地图交互相关的设置。地图的绘制分很多层,层级的显示需要根据不同的场景来设置。地图的触摸事件也很丰富,有单击、双击、单指拖拽、双指拖拽、双指旋转、双指缩放等,高德提供了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)地图交互的更多相关文章

  1. 大型情感类电视连续剧--Android高德之旅(2)地图类型

    总要说两句 今天继续我们的Android高德之旅,上一篇已经能够显示最主要的地图了.有主要的放大缩小功能.还有最后做的点击3D旋转.倾斜视角的效果.今天这篇文章来记录一下高德地图的5种地图类型. (其 ...

  2. Android的Bitmap和BitmapDrawable类解析-android学习之旅(六十)

    使用简单图片 使用Drawable对象 bitmap和BitmapDrawable对象 package peng.liu.test; import android.app.Activity; impo ...

  3. 大型情感类技术连续剧-徒手撸一个 uTools(二)

    前言 上篇手把手教你实现一个支持插件化的 uTools 工具箱我们介绍过了如何通过 electron 实现 utools 的插件功能体系,并按照 utools 的交互和设计做出了一套可以支持插件化的桌 ...

  4. 我的Android进阶之旅------>百度地图学习:BDLocation.getLocType ( )值分析

    BDLocation类,封装了定位SDK的定位结果,在BDLocationListener的onReceive方法中获取.通过该类用户可以获取error code,位置的坐标,精度半径等信息.具体方法 ...

  5. Android开发之旅: Intents和Intent Filters(理论部分)

    引言 大部分移动设备平台上的应用程序都运行在他们自己的沙盒中.他们彼此之间互相隔离,并且严格限制应用程序与硬件和原始组件之间的交互. 我们知道交流是多么的重要,作为一个孤岛没有交流的东西,一定毫无意义 ...

  6. 转:Android开发之旅:环境搭建及HelloWorld

    http://www.cnblogs.com/skynet/archive/2010/04/12/1709892.html 引言 本系列适合0基础的人员,因为我就是从0开始的,此系列记录我步入Andr ...

  7. Android开发之旅:环境搭建及HelloWorld

    引言 本系列适合0基础的人员,因为我就是从0开始的,此系列记录我步入Android开发的一些经验分享,望与君共勉!作为Android队伍中的一个新人的我,如果有什么不对的地方,还望不吝赐教. 在开始A ...

  8. Android 开发之旅:深入分析布局文件&又是“Hello World!”

    http://www.cnblogs.com/skynet/archive/2010/05/20/1740277.html 引言 上篇可以说是一个分水岭,它标志着我们从Android应用程序理论进入实 ...

  9. 【转】Android开发之旅:环境搭建及HelloWorld

    原文网址: http://www.cnblogs.com/skynet/archive/2010/04/12/1709892.html 引言 本系列适合0基础的人员,因为我就是从0开始的,此系列记录我 ...

随机推荐

  1. 【Java重构系列】重构31式之搬移方法

    重构第二式:搬移方法 (Refactoring 2: Move Method) 毋容置疑,搬移方法(Move Method)应该是最常用的重构手段之一,正因为太常用而且较为简单,以至于很多人并不认为它 ...

  2. 使用GruntJS链接与压缩多个JavaScript文件

    使用GruntJS链接与压缩多个JavaScript文件 自己写了个简单的HTML5 Canvas的图表库,可以支持饼图,折线图,散点图,盒子图 柱状图,同时支持鼠标提示,绘制过程动画效果等.最终我想 ...

  3. Oracle的SCN与检查点机制

    Oracle的SCN与检查点机制 SCN在Oracle的文档上以多种形式出现,一种是System Change Number,另一种是System Commit Number,在大多数情况下,Syst ...

  4. SQL GROUP BY GROUPING SETS,ROLLUP,CUBE(需求举例)

    实现按照不同级别分组统计 关于GROUP BY 中的GROUPING SETS,ROLLUP,CUBE 从需求的角度理解会更加容易些. 需求举例: 假如一所学校只有两个系, 每个系有两个专业, 每个专 ...

  5. BA的广度和深度

    http://insights.thoughtworkers.org/ba-capability-and-development-path-in-thoughtworks/ 作者:ThoughtWor ...

  6. hibernate中持久化对象的生命周期(三态:自由态,持久态,游离态 之间的转换)

    三态的基本概念: 1,  暂时状态(Transient):也叫自由态,仅仅存在于内存中,而在数据库中没有对应数据.用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫暂时对象 ...

  7. N!末尾有多少个零

    题目一:210!最后结果有几个零. 请自己思索10分钟以上再看解释 凡是这种题目必有规律可言, 关键是你找到这个规律的恒心.可采用笨拙的方法思考. 1!  =  1                   ...

  8. ( 转 )Github配置

    以下转自 http://liuzhijun.iteye.com/blog/1457207 有问题请联系我删除. -----———————————————————————— 如果你的代码不知道放哪里好, ...

  9. 在eclipse中部署发布web项目 和 更改eclipseweb项目发布的路径

    我的工作空间:d:workspaceweb项目名称:xxx在eclipse配置完tomcat后,发布到的路径是 d:\workspace\.metadata\.plugins\org.eclipse. ...

  10. XML的基本操作

    所有 XML 文档中的文本均会被解析器解析.只有 CDATA 区段(CDATA section)中的文本会被解析器忽略.CDATA 部分中的所有内容都会被解析器忽略.CDATA 部分由 "& ...