Android中Map应用开发进阶

来源:互联网 发布:ajax后台获取前端数据 编辑:程序博客网 时间:2024/06/07 07:08

最近在写一个GoogleMap的应用,发现网上关于GoogleMap的文章大多数只是简单的设置MapView教程,实际上有关Map应用还有很多可以挖掘。


很常用的是在地图上设置很多GeoPoint,然后用图片标识出来,这个也有专门的一个overlay可以做,叫做ItemizedOverlay。它保管着许多OverlayItem,每一个对应一个GeoPoint。你可以重写这个类,将drawable的图标标志传给它,重写createItem方法(这好像AdapterView的方式)和size方法。注意点如下:

1. 你可以写一个添加新标志的方法,但是注意每次添加数据后,在其他代码运行之前要马上运行populate()方法。

     或者你可以在构造方法当中将所有的OverlayItem加入ItemizedOverlay维护的list中,然后运行populate()方法。

2. 重写onTap(int i)方法,注意参数是(int i)的那个,这样你就可以在点击某一标志时得到响应,比如弹出气泡等等。


比如最常见的是设置自己的位置,通常要手动去拿GPS服务然后调getLastKnownLocation等等,其实完全不用写这么多代码,maps包里有一个overlay叫MyLocationOverLay,专门用来显示当前位置,默认的效果不错,自己也可以override它的onLocationChanged,drawMyLocation等方法实现自定义,很方便。需要注意的是,当重载了draw方法后,默认的图标显示不出来了,即使没有做任何修改。初始化代码如下:

MyLocationOverlay myLocationOverlay = new SelfLocationOverlay(
this, mapView);
myLocationOverlay.enableMyLocation();
myLocationOverlay.disableCompass();
mapView.getOverlays().add(myLocationOverlay);


以上两种overlay都是maps.jar里面的,很实用很方便,应用的实际代码网上都有,就不贴出来了。需要说明的是使用的时候需要在androidmanifest.xml中加上<uses-library android:name="com.google.android.maps" />。


另外有一个常见的问题,就是AVD开启不了GPS,DDMS向模拟器发送gps时候AVD会重启,解决方法如下,请从上到下尝试:

1. 在AVD的setting中打开GPS,或者开启AVD自身的map,看状态栏是否开启了GPS图标。

2. 新建AVD,在hardware中加上GPS support。

3. 使用2.1的platform而不是2.2,2.3。


今天就收获这么多,跟大家分享一下!




原创粉丝点击