GraphicsOverlay,Geometry,ItemizedOverlay和Graphic.
说一下我的理解,GraphicsOverlay就是字面的意思,一个图形的覆盖图层,把一个Graphic对象用setData传进去,然后用加入mapView,再刷新(1.3的时候是invalidate,现在改成refresh了)。
Geometry是一个构造图形的类,可以画线、圆形、多边形。
ItemizedOverlay是一个实现好的Overlay,可以放覆盖物,我认为放点最好了。
Graphic就是个图形。
好了,上代码:
private void drawGraphs(){
GraphicsOverlay graphicsOverlay = new GraphicsOverlay(mMapView);
mMapView.getOverlays().add(graphicsOverlay);
//添加点
graphicsOverlay.setData(drawLines());
//执行地图刷新使生效
mMapView.refresh();
}
Graphic drawLines(){
//构建点
Geometry pointGeometry = new Geometry();
//从数据库中取出所有需要的点的坐标
GeoPoint[] list = RidingUtils.getPoints(this, "points", 2);
//OverlayItem ,ItemizedOverlay是一起使用的
OverlayItem start = new OverlayItem(list[0], null, null);
OverlayItem end = new OverlayItem(list[list.length-1], null, null);
//设置起始点的图标,终点使用默认图标
start.setMarker(getResources().getDrawable(R.drawable.start_point));
ItemizedOverlay
itemizedOverlay.addItem(start);
itemizedOverlay.addItem(end);
//将起始点和重点放入地图
mMapView.getOverlays().add(itemizedOverlay);
//把所有点放入集合绘图类,连出一条线
pointGeometry.setPolyLine(list);
//设定样式
Symbol lineSymbol = new Symbol();
Symbol.Color pointColor = lineSymbol.new Color();
pointColor.red = 0;
pointColor.green = 126;
pointColor.blue = 255;
pointColor.alpha = 255;
lineSymbol.setLineSymbol(pointColor, 5);
lineSymbol.setPointSymbol(pointColor);
//生成Graphic对象
Graphic pointGraphic = new Graphic(pointGeometry, lineSymbol);
return pointGraphic;
}
上面注释蛮全的,就不一个个解释了,我是在初始化地图后做的上面操作的,如果没有初始地图上面不会成功的。
还有,如果你用的是1.3的jar包,在draw()方法中画图一定要再if(!shallow)中画图,否则会非常卡,因为每次缩放地图都回计算一遍所有的点,效率非常低。
~~~回家吃饭了。。