代码之家  ›  专栏  ›  技术社区  ›  Itsik

draw在我的android地图覆盖中不断被调用

  •  12
  • Itsik  · 技术社区  · 15 年前

    我正在地图视图上画一条路线。 虽然调试时,

    我只希望它被重新绘制,如果有人移动地图或缩放(绘制时考虑到这些变化的路线)

    8 回复  |  直到 15 年前
        1
  •  13
  •   Itsik    14 年前

    有两个draw方法可以被重写。

    void draw(android.graphics.Canvas canvas, MapView mapView, boolean shadow)
    

    boolean draw(android.graphics.Canvas canvas, MapView mapView, boolean shadow, long when)
    绘制动画覆盖的调用。

    我最初重写了第二个。

        2
  •  2
  •   Santoash    15 年前

    我认为draw方法被反复调用是因为背景被不断地重画。尝试设置“MapView.retiledrawmode”来绘制十字线。这基本上告诉mapView在覆盖层下绘制十字线。因此,在调用背景时不会调用overlay的draw方法。这为我解决了这个问题。

    MapView Api

        3
  •  2
  •   Theo    14 年前

    我被绊倒了,因为我没有意识到draw方法get不仅调用了你画的任何标记,还调用了那些标记的阴影。例如,如果有两个标记,并且将shadows设置为true(这是默认设置),那么draw方法将被调用4次(每个标记调用一次,每个标记的阴影调用一次)!

        4
  •  2
  •   Juice    13 年前

    在进一步检查之后,Overlay draw()确实可以像文档中所描述的那样工作。一个为shadow=true绘制,一个为shadow=false绘制。

    这可能是渲染贴图的预期方式。我没有找到或花足够的时间研究这些信息。

        5
  •  1
  •   Chris Knight    13 年前

    在我的应用程序中,当我加载地图的网络数据时,会显示一个不确定的进度条(例如旋转圆)。加载完网络数据后,我将进度条的可见性设置为“不可见”。但是,这会导致地图不断地重画,因为在地图上发生的任何动画(我猜)都会导致地图本身重画。解决这个问题的简单方法是将可见性设置为gone。例如,更改此项:

    ProgressBar loadingIcon = (ProgressBar) findViewById(R.id.loadingIcon);
    ...
    //Network data now finished loading...
    loadingIcon.setVisibility(View.INVISIBLE);
    

    对此:

    loadingIcon.setVisibility(View.GONE);
    

        6
  •  1
  •   Fahim Parkar    13 年前
        7
  •  0
  •   Howard Hodson    13 年前

    绘制循环结果是我的编码错误。根据doc,如果draw例程返回true,它要求立即更新。如果返回false,则每个叠加只进行两次传递;一个为真,一个为假。我正在返回true,这导致了不断的更新。在我改为returningfalse之后,每个叠加只发生了两次。没有循环。

        8
  •  -1
  •   Tim Cooper    13 年前

    您只需将其添加到ItemizeOverlay类:

    @Override public void draw( Canvas c, MapView m, boolean shadow ) { super.draw( c, m, false );}
    

    这将从地图视图覆盖中删除阴影。