对了,还有firstOverlay要说下,这是个MylocationOverla对象,继承ItemizedOverlay<OverlayItem>,是google map提供的api中查到的,是google map上面画图层需要用到的。还是老办法,继承了这个类那就覆盖里面的一些方法,其中要注意的就是因为其中有些参数是传进来的,所以在构造函数中要稍微处理下。(构造函数神马的还是用系统自动生成的比较好,免得弄错,上次就是因为调用super方法弄错了,找了半天才发现。。自己java基础真得检讨了。。)这个类中具体继承的类自己也可以查查看,像onTap()这个函数现在用到的就是点击标签的时候弹出窗口来显示一些信息咯。简单用法是这样,当然更复杂的以后用到了再说吧。
那么定位就OK了。
接下来说路线的显示。。方法倒是一样,一个是显示一个标签,一个是显示N个标签。。。
因为显示的标签不少,我怕主界面会卡,我就放到了另外一个线程中了,先看看
class ShowRouteThread implements Runnable {
@Override
public void run() {
System.out.println("进入了显示路径函数,开始画图吧");
stopTag=routeData.getStopTag();
stopTitle=routeData.getStopTitle();
stopLat=routeData.getStopLat();
stopLon=routeData.getStopLon();
int lat,lon;
for (int i = 0; i < stopTag.size(); i++) {
lat=(int)(Double.parseDouble(stopLat.get(i))*1000000);
lon=(int)(Double.parseDouble(stopLon.get(i))*1000000);
GeoPoint point=new GeoPoint(lat,lon);
//一个overitem就是一个点,一个对象
OverlayItem overlayitem = new OverlayItem(point, stopTag.get(i), stopTitle.get(i));
//RouteOverlay间接继承ItemizedOverlay<OverlayItem>,表示一个图层,在这个图层上面可以有很多的图标
RouteOverlay.addOverlay(overlayitem);
}
//mapOverlays在前面已经和手机图层联系起来了,将一个个图层添加进去就能显示在手机上
mapOverlays.add(RouteOverlay);
GeoPoint lastpPoint=new GeoPoint( (int)(Double.parseDouble(stopLat.get(stopTag.size()-1))*1000000), (int)(Double.parseDouble(stopLon.get(stopTag.size()-1))*1000000) );
//以动画的形式以一定的速度移动到某个点
myloctionController.animateTo(lastpPoint);
//myloctionController.setZoom(10);//设置放大的级别
myloctionController.setCenter(lastpPoint);//估计是中间设置吧
}
}
首先是把原来解析到的数据都拿来吧
stopTag=routeData.getStopTag();
stopTitle=routeData.getStopTitle();
stopLat=routeData.getStopLat();
stopLon=routeData.getStopLon();
之前设计的xml的数据存放方法还是不错的,这样拿来就简单多了。这次是直接显示路线,就不用等改变了经纬度再显示位置啦,当然就不用Locationmanager了,直接根据四个arraylist里面的数据来确定位置,生成标签对象,一个个添加到图层里面,然后等全部都添加完以后再把这个图层放在手机图层里面,和上面的差不多。
这样子的话我们这个程序里面现在有两个图层,一个是定位我们自己位置的firstoverlay,然后就是现在这个RouteOverlay,当然现在这个图层里面标签多了点而已。那么这两个就都搞定了。
哦,对了,最后还得说下权限问题,上次也就是因为这个卡了好久。
要用google map的话除了apikey以外(这个就自己去申请吧),权限也是要的,就是这个<uses-library android:name="com.google.android.maps" />
然后就是要精确点的定位的话就要用 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
当然咯,还有一个就是因为要联网嘛,所以要 <uses-permission android:name="android.permission.INTERNET" />
好,这样就木有问题了!