Android的MapView类覆盖在缩放时消失(Android MapView overlay d

2019-08-03 03:05发布

我工作的一个简单的Android应用时,在地图上绘制路线。 一切都进展顺利,但在我的三星Galaxy S2放大时,我有一个问题。 它适用于银河S3罚款,所以我不知道是否它的内存管理相关的较低specced设备上。 它还在模拟器上正常工作。

下面是等效的代码位于该覆盖的onDraw方法,只是浓缩了张贴在这里:

Point current = new Point();
Path path = new Path();
Projection projection = mapView.getProjection();

Iterator<GeoPoint> iterator = pointList.iterator();
if (iterator.hasNext()) {
    projection.toPixels(iterator.next(), current);
    path.moveTo((float) current.x, (float) current.y);
} else return path;
while(iterator.hasNext()) {
    projection.toPixels(iterator.next(), current);
    path.lineTo((float) current.x, (float) current.y);
}

Paint roadPaint = new Paint();
roadPaint.setAntiAlias(true);
roadPaint.setStrokeWidth(8.0f);
roadPaint.setColor(Color.BLACK);
roadPaint.setStyle(Paint.Style.STROKE);

canvas.drawPath(path, roadPaint);

这不是太不相似的大部分示例代码左右浮动这样做的。 我只是想知道如果任何人都可以证实我的怀疑,并建议如果有什么我可以配置或调整方面做,我可以做强制在所有缩放级别绘图?

提前致谢。

欢呼声,弥敦道

Answer 1:

你说上面的代码是等效的(不是你正在运行的实际代码),因为你是返回一个很清晰的Path在对象onDraw()你不能。

“压缩形式”的代码,你应该展示工作,以及使用drawLine() 所以,问题应该来自别的东西(可能原码)。

无论如何,我给你一对夫妇的提示:

  • 当对象的你是画在画布的顶部和底部都出入画面时,物体会被忽略,而不是绘制。 检查,如果这不是什么与你的路径发生。 见我的答案在这个岗位Android的地图覆盖图上放大消失
  • 你不需要每次重建的路径对象。 你可能已经在做了,这就是为什么你做上面的短版。 请参阅这篇文章的一些建议,以改善道路图纸我的答案: 覆盖操作变焦时
  • 如果由于某种原因,你真的想用较慢的方法drawLine()您可以使用follwing使线更好看:

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

最后,如果问题仍然存在,与更多的相关代码更新您的问题,让我知道。 也许我可以进一步帮助。

问候。



Answer 2:

问题是,你是你自己画的覆盖了的MapView的一个非常特殊的状态。 您应该使用OverlayItem代替。

该OverlayItem被添加到的MapView覆盖集合,的MapView处理所有依赖于它自己的状态(缩放,位置等),重画

@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;
    }
}


文章来源: Android MapView overlay disappearing when zooming in