因为显示的标签不少,我怕主界面会卡,我就放到了另外一个线程中了,先看看
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,表示一个图层,在这个图层上面可以有很多的图标
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以外(这个就自己去申请吧),权限也是要的,就是这个
然后就是要精确点的定位的话就要用
当然咯,还有一个就是因为要联网嘛,所以要
好,这样就木有问题了!