您的位置:首页 > 其它

(10.14更新)关于高德地图安卓SDK的一些使用细节坑(包括Marker与缩放地图)

2017-10-12 20:29 417 查看
高德的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()
设置是否使用了自带的视角移动行为,因为是异步操作,有可能会导致自己缩放完毕后,又发生了上面这个函数的缩放行为,从而导致无效
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐