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

    关于Java代码的性能优化,是每个javaer都渴望掌握的本领,进而晋升为大牛的必经之路,但是对java的调优需要了解整个java的运行 机制及底层调用细节,需要多看多读多写多试,并非一朝一夕之功.本 ...

  2. Shell if else语句

    if 语句通过关系运算符判断表达式的真假来决定执行哪个分支.Shell 有三种 if ... else 语句: if ... fi 语句: if ... else ... fi 语句: if ... ...

  3. PTA 07-图4 哈利·波特的考试 (25分)

    哈利·波特要考试了,他需要你的帮助.这门课学的是用魔咒将一种动物变成另一种动物的本事.例如将猫变成老鼠的魔咒是haha,将老鼠变成鱼的魔咒是hehe等等.反方向变化的魔咒就是简单地将原来的魔咒倒过来念 ...

  4. Theano FCN实现与训练经验与教训小结

    NaN 计算softmax loss时要用numeric robust 的计算方式. softmax与 loss可能要分开计算. 得到前者的计算方式可以是常规方法. 但计算后者时要注意无穷大和NaN的 ...

  5. 小物件之radio单选列表

    有时候在控制器中做了一个数组 然后需要在模板view中循环 同时还需要判断是否有选中的值,就会造成很多开始闭合标签 以前都是这样写 这样实在太繁琐了,不如封装一个小物件 封装函数如下: 代码如下: f ...

  6. SAP财务凭证冲销

    爱思普信息咨询/SAP Partner网(SAP软件/ERP介绍/SAP All-in one介绍) 客户公司的同事有时经常会问到冲销的问题,可能大部份的用户对于财务的冲销功能都不是很理解,这里我们全 ...

  7. runnable:在线IDE+代码片段分享

    在我之前的博客20个最好的在线IDE中列举过很多在线IDE,可以很方便的在云端执行代码,这样在你手头没有编译器时想试个小程序会非常有用. 今天介绍的这个网站runnable把在线IDE和代码片段结合了 ...

  8. MVC传递Model之TempData、ViewData、ViewBag差别及用途

    MVC使用过程中常常会用到TempData.ViewData.ViewBag三种方式,这三种什么差别呢? TempData:默认存储于Session中,可通过继承ITempDataProvider接口 ...

  9. Makefile 入门与基本语法 分类: C/C++ ubuntu 2015-05-18 11:16 466人阅读 评论(0) 收藏

    在我看来,学会写简单的Makefile,阅读较复杂的makefile,是每一个Linux程序员都必须拥有的基本素质.Makefile可以自动识别哪些源文件被更改过,需要重新编译,那些不需要.从而节省大 ...

  10. [Javascript + rxjs] Introducing the Observable

    In this lesson we will get introduced to the Observable type. An Observable is a collection that arr ...