1

我目前正在制作一个基于安卓地图的应用程序。这个应用程序的目的是在地图视图上显示复杂的叠加层。为此,我使用自定义覆盖和覆盖draw()功能。

那部分工作得很好,现在我想为每个叠加层处理 onTap 事件。我目前在做什么:

public class MapOverlay extends Overlay {


    public MapOverlay(Kml kml,String color,Projection projection){
    }   

    public void draw(Canvas canvas, MapView mapv, boolean shadow){
        super.draw(canvas, mapv, shadow);

        // draw path...
    }

    @Override
    public boolean onTap(GeoPoint gp, MapView mapView) {
        Log.i("Overlay","Say whaaaat!");
        return super.onTap(gp, mapView);
    }
}

正如预期的那样,每个叠加层都覆盖了整个地图视图,因此当我点击叠加层时,每个叠加层都会触发 onTap 事件。假设我有 6 个叠加层,我不知道点击了哪条路径。

有解决方案吗?

更新:

现在,我已经成功地使用 ItemizedOverlay 在我的地图上显示了标记(也与 ItemizedBaloonOverlay 并列),但这并不是我想要的。

我想要一个像 PolygonOverlay 这样的东西,它会检测是否在多边形内完成了点击,并且在这种情况下只触发一个点击事件。

谢谢

4

2 回答 2

0

使用以下方法代替 onTap(GeoPoint gp,MapView map)

@Override
protected boolean onTap(int index) {
final OverlayItem item = mOverlays.get(index);        
//your code for your requirement
return true;
}
于 2012-04-06T09:55:31.733 回答
0

基于另一个帖子的这个答案,我已经构建了我的自定义叠加层并且它有效!所以基本上,不需要 ItemizedOverlay 的东西(除非你想显示一个覆盖项)。

只需使用我之前的 MapOverlay 类并添加基本的 onTap() 函数:

public class MapOverlay extends Overlay {

    private Path path;

    public MapOverlay(){
        super();
    }

    @Override
    public void draw(Canvas canvas, MapView mapv, boolean shadow) {
        super.draw(canvas, mapv, shadow);

            // draw your path and store it in variable path
    }

    @Override
    public boolean onTap(GeoPoint geoPoint, MapView mapView) {

        RectF rectF = new RectF();
        path.computeBounds(rectF, true);
        Region region = new Region();
        region.setPath(path, new Region((int) rectF.left, (int) rectF.top, (int) rectF.right, (int) rectF.bottom));

        Point point = new Point();
        mapView.getProjection().toPixels(geoPoint, point);

        if (region.contains(point.x, point.y)) {
            Log.d("onTap", point.x+" "+point.y);
        }

        return super.onTap(geoPoint, mapView);
    }

}

就是这样!剩下的唯一一件事就是检查 z 顺序,如果你只想触发一个上行。如果我在 MapOverlay 课程中跟踪它,那应该没什么大不了的。

于 2012-04-06T12:52:33.047 回答