Android开发教程:NextBus之显示实时车辆位置信息(3)

解析之后我们得到了此刻汽车的朝向,经纬度等等信息就能画出车子在路上的位置了。画图的操作是这样的,首先我们要获得两个原始的图像,一个车的图像,一个箭头的图像,因为箭头是要变化的,我们先定义一个矩阵的,然后每次画一个车,就按照保存着的车辆朝向信息来把原始的箭头进行旋转,并且生成一副新的图像。然后把新的箭头位图添加到车辆位图的上面,产生叠加的效果。这里所有的车是一个图层,而每个箭头是单独的一个图层,因为每个图层的图像是要一样的嘛。接下来吧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, 00, 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();           }  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wysfyd.html