关于高德地图安卓SDK的一些使用细节(Marker与缩放地图)

2017/10/12 _Android

高德的SDK相对百度来说,接口更多,国内使用的范围也更大。但个人感觉其开发文档很多地方说的不够详细,甚至是错误的,不方便大家进行开发,只能靠社区来自救。

这里列举几个地方。

  1. 在对AMap对象进行一些操作的时候,如设置监听器等,回调函数中有marker参数,在做和现有marker做比较的时候,要用equals()(不能直接对两个引用进行比较,内部已经复写了equals())。
  2. marker上设置了按下监听器以及弹出infoWindow的时候,需要在监听器内写入showInfoWindow(),并且完成title的设置,不然会导致监听后弹不出窗口(估计默认下就是通过默认监听器来操作的,创建了新监听器后,原弹出逻辑被复写掉了)。
  3. 这个和Marker无关,但也是官方文档没说清楚的地方,开发包的权限需要多添加一个 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> 不然就是不停地报 java.lang.SecurityException: WifiService: Neither user ...... (这个有可能是版本导致的问题,我的最低版本为5.1,地图依赖包为3D地图V5.40)
  4. 被设计用来控制缩放的接口函数是 CameraUpdateFactory.zoomTo(),传入的参数是3-19的缩放等级。但是这个API在3D地图下不稳定,有时候行有时候不行的。个人给出的解决方案是,为mLocationClient设置一个LocationListener(通过new AMapLocationClient(activity.getApplicationContext())来获得Client)。在这个监听器内获得当前的坐标aMapLocation.getLatitude(),aMapLocation.getLongtitude() , 然后调用aMap.moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(new LatLng(lATITUDE, lONGTITUDE), 17, 0, 0)));进行镜头定位与缩放。然后在外部做一个第一次监听才移动镜头的逻辑。(很不优雅,但是有效)。
    *如果还是没有效果,检查下自己的地图 myLocationStyle.myLocationType() 设置是否使用了自带的视角移动行为,因为是异步操作,有可能会导致自己缩放完毕后,又发生了上面这个函数的缩放行为,从而导致无效 *

Search

    Table of Contents