解析之后我们得到了此刻汽车的朝向,经纬度等等信息就能画出车子在路上的位置了。画图的操作是这样的,首先我们要获得两个原始的图像,一个车的图像,一个箭头的图像,因为箭头是要变化的,我们先定义一个矩阵的,然后每次画一个车,就按照保存着的车辆朝向信息来把原始的箭头进行旋转,并且生成一副新的图像。然后把新的箭头位图添加到车辆位图的上面,产生叠加的效果。这里所有的车是一个图层,而每个箭头是单独的一个图层,因为每个图层的图像是要一样的嘛。接下来吧N+1个图层都添加到mapview中就可以了,添加之前记得把原来的先擦除,
private void afterClickBusOnRoute(ArrayList<VehicleLocationsData> vehicleLocationsData) { Drawable routeDrawable=getResources().getDrawable(R.drawable.bus);//显示公交路线的图标 Bitmap bitmap=BitmapFactory.decodeResource(this.getResources(),R.drawable.arrow);//获得位图 int w = bitmap.getWidth();// 获得位图宽 int h = bitmap.getHeight();// 获得位图高 Matrix matrix = new Matrix(); final MyOverlay Route_Overlay=new MyOverlay(routeDrawable, this); int lat=0,lon=0; float a; ArrayList<MyOverlay> allArrow=new ArrayList<MyOverlay>(); for (int i = 0; i < vehicleLocationsData.size(); i++) { //System.out.println(vehicleLocationsData.get(i).toString()); //获得应该旋转的角度 a=Float.valueOf(vehicleLocationsData.get(i).getHeading()); matrix.setRotate(a);//利用矩阵旋转 Bitmap bm2 = Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true); //获得Drawable对象 BitmapDrawable bd= new BitmapDrawable(getResources(), bm2); lat=(int)(Double.parseDouble(vehicleLocationsData.get(i).getLat())*1000000); lon=(int)(Double.parseDouble(vehicleLocationsData.get(i).getLon())*1000000); GeoPoint point=new GeoPoint(lat,lon); MyOverlay arrow_Overlay=new MyOverlay(bd,this); OverlayItem overlayitem = new OverlayItem(point, vehicleLocationsData.get(i).getRouteTag(), vehicleLocationsData.get(i).getDirTag()+vehicleLocationsData.get(i).getHeading()+ vehicleLocationsData.get(i).getHeading()); Route_Overlay.addOverlay(overlayitem); arrow_Overlay.addOverlay(overlayitem); allArrow.add(arrow_Overlay); } mapOverlays.clear(); mapOverlays=mapView.getOverlays(); mapOverlays.add(Route_Overlay); //注意图层放置的顺序,先放的在下面 for (int i = 0; i < allArrow.size(); i++) { mapOverlays.add(allArrow.get(i)); } GeoPoint lastpPoint=new GeoPoint(lat, lon ); myloctionController.animateTo(lastpPoint); myloctionController.setZoom(13); myloctionController.setCenter(lastpPoint); //mapView.invalidate(); }