Android MapView overlay disappearing when zooming in

前端 未结 2 1929
暖寄归人
暖寄归人 2021-01-23 08:23

I\'m working on a simple Android app for plotting routes on a map. All is going well, but I have an issue when zooming in on my Samsung Galaxy S2. It works fine on a Galaxy S3

相关标签:
2条回答
  • 2021-01-23 08:59

    You said that code above was an equivalent (not the real code you are running) and that's clear because you are returning a Path object in a onDraw() which you couldn't.

    The "compressed form" of code you show should work as well as using the drawLine(). So the problem should come from something else (may the original code).

    Anyway, I'll give you a couple of hints:

    • When the top and bottom of object you are drawing to a canvas are both out of screen, the object is ignored and not drawn. Check if this is not whats happening with your path. See my answer in this post Android Map Overlay Disappears on Zoom
    • You don't need to rebuild the path object every time. You are probably already doing it, and that's why you made the short version above. See my answer in this post with some suggestions to improve path drawing: Overlay behavior when zooming
    • If for some reason you really want to use the slower approach of drawLine(), you can use the follwing to make the line look better:

      paint = new Paint();
      paint.setStyle(Paint.Style.STROKE);
      paint.setStrokeJoin(Paint.Join.ROUND);
      paint.setStrokeCap(Paint.Cap.ROUND);
      paint.setColor(...);
      paint.setAlpha(...);
      paint.setStrokeWidth(...);
      

    Finally, if the issue remains, update your question with more relevant code and let me know. Maybe I can help further.

    Regards.

    0 讨论(0)
  • 2021-01-23 08:59

    The problem is that you are painting the overlay yourself for a very specific state of the mapview. You should use OverlayItem instead.

    The OverlayItem is added to the MapView overlays collection, and the MapView handles all the re-drawing depending on it's own state ( zoom, location, etc )

    @Override
    public void draw( Canvas canvas, MapView mapView, boolean shadow )
    {
        super.draw( canvas, mapView, shadow );
    
        int x1 = -1;
        int y1 = -1;
        int x2 = -1;
        int y2 = -1;
    
        Paint paint = new Paint();
        paint.setStyle( Paint.Style.STROKE );
        paint.setColor( GeoLocation.ROUTE_COLOR );
        paint.setStrokeWidth( STROKE_WIDTH );
    
        for ( int i = 0; i < mRouteGeoPoints.size(); i++ )
        {
            Point point = new Point();
            mapView.getProjection().toPixels( geoPoints.get( i ), point );
            x2 = point.x;
            y2 = point.y;
            if ( i > 0 )
            {
                canvas.drawLine( x1, y1, x2, y2, paint );
            }
            x1 = x2;
            y1 = y2;
        }
    }
    
    0 讨论(0)
提交回复
热议问题