一.Overlay简述
Overlay,即覆盖,就将他理解成一块透明的画布,将它铺在地图上,可以进行的操作主要有两项:绘制(标记)和处理触摸事件。
建立一个覆盖我们需要做的步骤如下 :
1.创建一个继承自Overlay的新类,这个类我们需要复写draw方法和onTap方法。(即新建一张画布)
代码示例:
public class MyOverlay extends Overlay{
@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
// TODO Auto-generated method stub
super.draw(canvas, mapView, shadow);
}
@Override
public boolean onTap(GeoPoint p, MapView mapView) {
// TODO Auto-generated method stub
return super.onTap(p, mapView);
}
}
这里简要说明一下,draw方法在使用时,需要使用传进来的geopoint,即实际的经纬度位置,将它转换成投影(Projection)。之后根据这个投影位置在进行绘制。
2.在MapView上添加(删除)新覆盖。(即把生成的画布贴在地图上)
(1)添加
private void display(){
List<Overlay> overlays=mv.getOverlays();
MyOverlay myoverlay=new MyOverlay();
overlays.add(myoverlay);
}
首先,获取Overlays列表,接着新建MyOverlay 实例对象,最后将该对象添加到列表中。这样,在onCreate()中调用display()函数,就将会显示MyOverlay覆盖中所绘制的内容,同时也会对点击动作做出相应的回应。
(2)删除
删除所有覆盖:
overlays.clear();
删除指定覆盖:
overlays.remove(int i);//删除第i个覆盖,i的取值是0到overlays.size()-1。
3.详解draw方法和onTap方法
(1) draw(Canvas canvas, MapView mapView, boolean shadow){...}
canvas:就是所要绘制其上的画布。这里要啰嗦一下Canvas 类。Canvas类就是表示一块画布,你可以在上面画你想画的东西。它提供一些方法,使得我们可以绘制各种形状,颜色的图形。具体的使用方法我会在今后介绍。
mapView:所需标记的地图图层。这个参数的一个重要作用就是MapView.getProjection()这个方法,它完成从物理经纬度到屏幕投影坐标的转换,继而在相应坐标点上进行绘制。
shadow:当该值为true,则需绘制阴影图层,若为false,则只需绘制本来的内容即可。
(2)onTap(GeoPoint p, MapView mapView){}
该方法响应点击事件
p:被点击的点。
mapView:产生点击事件的地图图层。