我目前需要在MapView中显示一条船/游轮路线,就像这样
我开始编写我的版本,但由于我看到的水路线的每个例子都是一样的,我开始想知道是否有一种“标准”方法。我一直在寻找几个小时,但还没找到任何东西,所以我决定在这里问。
这是我到目前为止所拥有的:
Point point2 = new Point();
projection.toPixels(gp2, point2);
paint.setStrokeWidth(5);
paint.setPathEffect(new DashPathEffect(new float[] {8,12}, 5));
paint.setAlpha(defaultColor==Color.parseColor("#6C8715")?200:100);
canvas.drawLine(point.x, point.y, point2.x,point2.y, paint);
它正在工作,唯一要做的就是每次用户缩放时调整线条。 这是实现它的方式,还是有一种标准的方法呢?
感谢任何帮助,谢谢。
答案 0 :(得分:1)
扩展叠加并覆盖其中的draw()方法。然后按照之前的方式做同样的事情。您将在移动/缩放
中获得自动重绘答案 1 :(得分:1)
如果您将代码移动到Overlay,那么当用户缩放/平移时,您不必担心调整行。由于你可能有两个以上的分数,你也可以利用Path类。
import com.google.android.maps.Overlay;
class PathOverlay extends Overlay {
private void List<GeoPoint>geoPoints;
public PathOverlay(List<GeoPoint> points) {
this.geoPoints = geoPoints;
}
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
super.draw(canvas, mapv, shadow);
Paint paint = new Paint();
paint.setStrokeWidth(5);
paint.setPathEffect(new DashPathEffect(new float[] {8,12}, 5));
paint.setAlpha(defaultColor==Color.parseColor("#6C8715")?200:100);
Path path = new Path();
boolean isFirst = true;
for (GeoPoint geoPoint : this.geoPoints) {
Point point = new Point();
mapView.getProjection().toPixels(geoPoint, point);
if (isFirst) {
isFirst = false;
path.moveTo(point.x, point.y);
}
else {
path.lineTo(point.x,point.y);
}
}
canvas.drawPath(path, paint);
}
}