【问题标题】:Android Canvas: Polygons are deformed when filled (Paint.Style.Fill)?Android Canvas:填充时多边形变形(Paint.Style.Fill)?
【发布时间】:2012-10-14 15:37:17
【问题描述】:

我正在尝试使用 Google 地图引擎在 android 中使用不规则多边形覆盖地图上的一个区域。

这是我正在测试的示例代码...覆盖 Overlay 类的 draw 方法。

    @Override
    public boolean draw(Canvas canvas, MapView mapView, boolean shadow,
            long when) {

        ArrayList<GeoPoint> points = new ArrayList<GeoPoint>();

        points.add(getPoint(40.69601721120307,-7.975247972597344));
        points.add(getPoint(39.59209428101375,-5.602198679879018));
        points.add(getPoint(37.98114679179523,-5.43877491468928 ));
        points.add(getPoint(39.01059159609532,-4.050442951443798));
        points.add(getPoint(37.99556954318146,-1.728440918734253));
        points.add(getPoint(39.26565517073047,-2.576421100521262));
        points.add(getPoint(40.21994329403012,-1.164105822610836));
        points.add(getPoint(40.57540056971796,-3.415060042751821));
        points.add(getPoint(42.5081775151286,-4.553753858729792));
        points.add(getPoint(40.74284989396188,-5.388244948956315));
        points.add(getPoint(40.69601721120307,-7.975247972597344));



        Paint mPaint = new Paint();
        mPaint.setColor(Color.RED);        
        mPaint.setStyle(Style.STROKE);
        mPaint.setStrokeWidth(2);

        Point point1 = null;
        Path path = new Path();
        for(GeoPoint p : points){                                                                                  

            Point point2 = new Point();         
            mapView.getProjection().toPixels(p, point2);

            if(point1 != null){                 
                path.lineTo(point2.x, point2.y);                
                canvas.drawPath(path, mPaint);
                mapView.getProjection().toPixels(p, point1);
            } else {
                point1 = new Point();
                mapView.getProjection().toPixels(p, point1);                
                path.moveTo(point1.x, point1.y);
            }

        }
        return true;
    }

当我运行测试时,我可以在地图上看到这个结果:

但是,当我将样式更改为 Style.STROKE_FILL 或 Style.FILL 时,我会在地图上看到以下内容:

我在论坛中找不到解决此问题的方法。

如果有任何帮助,我将不胜感激。

谢谢。

【问题讨论】:

    标签: android google-maps polygon


    【解决方案1】:

    试试这个。更改是在完成后绘制路径。

        Point point1 = null;
        Path path = new Path();
    
        for(GeoPoint p : points){                                                                                  
    
            Point point2 = new Point();         
            mapView.getProjection().toPixels(p, point2);
    
            if(point1 != null){                 
                path.lineTo(point2.x, point2.y);                        
                mapView.getProjection().toPixels(p, point1);
            } else {
                point1 = new Point();
                mapView.getProjection().toPixels(p, point1);                
                path.moveTo(point1.x, point1.y);
            }
    
        }
        canvas.drawPath(path, mPaint);
    

    您还可以在绘制之前检查路径。

    【讨论】:

      【解决方案2】:

      你确定点的顺序是正确的吗?

      【讨论】:

        【解决方案3】:
               Paint   mPaint = new Paint();
               Path path = new Path();
        
        
                // 
               GeoPoint name0 = new GeoPoint(40696017,-7975247);  // = 40.69601721120307,-7.975247972597344
               Point pname0 = new Point();   
               projection.toPixels(name0, pname0);
               path.moveTo(pname0.x, pname0.y);        //first= moveto
               //
               GeoPoint name1 = new GeoPoint(39592094,-5602198); // 39.59209428101375,-5.602198679879018
               Point pname1 = new Point();   
               projection.toPixels(name1, pname1);
               path.lineTo(pname1.x, pname1.y);
               //
               GeoPoint name2 = new GeoPoint(...,...);
               Point pname2 = new Point();   
               projection.toPixels(name2, pname2);
               path.lineTo(pname2.x, pname2.y);
        
               // ... , ...
        
        
               canvas.drawPath(path, mPaint);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-03
          • 1970-01-01
          • 1970-01-01
          • 2014-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多