我试图覆盖onTap函数,用于Mapview的叠加,其中包含一组使用Path绘制的线条。我想知道是否有任何具有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);
}
}
答案 0 :(得分: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);
}