最近结合公司项目,在做一个基于Google Map的小应用。遇到了一些问题,整理如下。
?
1)关于ItemizedOverlay
?
按照Google文档的说法,在Google Map上面叠加层需要继承一个ItemizedOverlay,实现其内部的一些方法,比如size(),getOverlayItem,AddOverlayItem等。
?
由于项目需要,需要在地图上画N种不同的样式Item,开始我打算使用AddOverlayItem,分别SetMark实现,后来也不知是什么原因,只能使用一种Drawable,后面再设置就不能显示了。
?
无奈之下利用构造函数传入数据,使用draw方法来绘图,再利用坐标加阈值加遍历的方法实现OnTap事件。这样简单的点击查询就完成了。但是麻烦的还在后面。
?
2)关于LongPress和DoubleClick
?
ItemizedOverlay原生不支持LongPress或者DoubleClick事件,试了试Activity内部的LongClick方法,也没成功。查了查资料,说要在继承ItemizedOverlay的类中实现GestureDetector(?)接口,无奈本人技术有限,没能研究明白。
?
后来在问答里面得高人相助,告知可以使用“mapview-overlay-manager ” Google Code 项目,遂下下来研究。经过对源码的改造,经过了九九八十一难,终于算是大功告成了。
?
稍微总结一下:1)ItemizedOverlay对于简单点的放置以及显示来讲还是不错的,毕竟省去了很多绘制方面繁琐的操作,不过相对的,只是用ItemizedOverlay里面提供的那些方法毕竟功能薄弱,遇到需要灵活性的开发,还是需要使用到父类Overlay里面的Draw()方法。2)而ItemizedOverlay原生不支持多种事件方法也很让人头大,不过幸好开源的力量大,当然也经过了自己的改造,算是成功实现了自己的需求。也让自己对以前某些混淆不清的概念得到了重新的认识。
?
虽然“mapview-overlay-manager”项目的作者肯定看不到我这篇文章,但是还是在此表达一下谢意。
?
具体遇到的问题就不细致说了,都在代码里面,贴上来也没太大意思。这里留个底,算是备查好了。