高德的SDK相对百度来说,接口更多,国内使用的范围也更大。但个人感觉其开发文档很多地方说的不够详细,甚至是错误的,不方便大家进行开发,只能靠社区来自救。
这里列举几个地方。
- 在对AMap对象进行一些操作的时候,如设置监听器等,回调函数中有marker参数,在做和现有marker做比较的时候,要用
equals()
(不能直接对两个引用进行比较,内部已经复写了equals()
)。 - marker上设置了按下监听器以及弹出infoWindow的时候,需要在监听器内写入
showInfoWindow()
,并且完成title的设置,不然会导致监听后弹不出窗口(估计默认下就是通过默认监听器来操作的,创建了新监听器后,原弹出逻辑被复写掉了)。 - 这个和Marker无关,但也是官方文档没说清楚的地方,开发包的权限需要多添加一个
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
不然就是不停地报java.lang.SecurityException: WifiService: Neither user ......
(这个有可能是版本导致的问题,我的最低版本为5.1,地图依赖包为3D地图V5.40) - 被设计用来控制缩放的接口函数是
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()
设置是否使用了自带的视角移动行为,因为是异步操作,有可能会导致自己缩放完毕后,又发生了上面这个函数的缩放行为,从而导致无效 *