【问题标题】:Show boat route in Google Maps MapView - Android在 Google Maps MapView - Android 中显示船只路线
【发布时间】:2012-10-07 02:54:40
【问题描述】:

我目前需要在 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);

它正在工作,剩下要做的就是在每次用户缩放时调整线条。 这是这样做的方式,还是有一种标准的方式?

感谢您的帮助,谢谢。

【问题讨论】:

    标签: android google-maps android-mapview


    【解决方案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);
        }
    }
    

    【讨论】:

    • 感谢您的回答,我现在无法测试它,但我感觉它会起作用,但只是一个简单的问题:如果用户缩小线条仍然出现虚线或当用户缩小线变为“一”( - - - - - 变为 _______ )?
    【解决方案2】:

    扩展 Overlay 并覆盖其中的 draw() 方法。然后做你之前做的同样的事情。您将在移动/缩放中自动重绘

    这个答案对你有用How to draw a path on a map using kml file?

    【讨论】:

      猜你喜欢
      • 2013-02-14
      • 2013-09-26
      • 1970-01-01
      • 1970-01-01
      • 2014-06-23
      • 1970-01-01
      • 2013-01-23
      • 2019-07-18
      • 2015-02-19
      相关资源
      最近更新 更多