Issue
I am trying to override onTap function for an overlay of Mapview which contains a set of lines drawn using a Path. I was wondering if there is any specific overlay designed which has the onTap for lines?
My overlay looks like this:
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);
}
}
Solution
@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);
}
Answered By - Danersido
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.