0

パスを使用して描画された一連の線を含むMapviewのオーバーレイのonTap関数をオーバーライドしようとしています。onTap for linesを備えた特定のオーバーレイが設計されているかどうか疑問に思いましたか?

私のオーバーレイは次のようになります。

public class MyPathOverlay extends Overlay {
MapView map;
Projection projection;
ArrayList<Pair<GeoPoint, Integer>> pointsList; // Set of points and the
                                                // color of the line
                                                // starting from this point

public MyPathOverlay(MapView contextMap, ArrayList<Pair<GeoPoint, Integer>> points) {
    map = contextMap;
    projection = map.getProjection();
    pointsList = points;

}

@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
    super.draw(canvas, mapView, shadow);
    if (shadow == false && pointsList !=null) {

        for (int i = 0; i < pointsList.size() - 1; i++) {
            Paint paint = new Paint();
            paint.setDither(true);
            Pair<GeoPoint, Integer> p1 = pointsList.get(i);
            GeoPoint gp1 = p1.first;
            paint.setColor(p1.second);
            GeoPoint gp2 = pointsList.get(i + 1).first;
            paint.setStyle(Paint.Style.FILL_AND_STROKE);
            paint.setStrokeJoin(Paint.Join.ROUND);
            paint.setStrokeCap(Paint.Cap.ROUND);
            paint.setStrokeWidth(5);
            Point point1 = new Point();
            Point point2 = new Point();

            projection.toPixels(gp1, point1);
            projection.toPixels(gp2, point2);
            Path path = new Path();
            path.moveTo(point2.x, point2.y);
            path.lineTo(point1.x, point1.y);
            canvas.drawPath(path, paint);
        }
    }
}

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

    return super.onTap(p, mapView);
}

}

4

1 に答える 1

2
@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);
        Log.d("onTap","Path touched!!!");
    }

    return super.onTap(geoPoint, mapView);
}
于 2012-07-19T10:45:25.893 に答える