gpt4 book ai didi

Android map ,在 Overlay 构造函数中绘制

转载 作者:行者123 更新时间:2023-11-29 21:53:04 26 4
gpt4 key购买 nike

我有一个 path(),它是从一个 json 对象创建的。我将 JSON 对象传递给构造函数中的覆盖对象。

扩展 Overlay 的对象总是在 map 移动、渲染、触摸等任何时候调用 draw()。即使您的叠加层不可见或不在附近或任何其他地方。

我想在 for 循环中生成我的路径对象,实际上是一个嵌套循环,因为 json 对象包含嵌套的 json 数组。这具有很高的理论计算时间,因此我不想在 draw() 方法中执行此操作。相反,我尝试在我的构造函数中执行逻辑,制作 path() 文件,然后在此处需要的 draw() 方法中仅调用该路径文件一次canvas.drawPath(path, mPaint);

不幸的是,当我在构造函数中创建我的路径时,它不会随着 map 平移。但是当我在 draw() 方法中创建它时,使用完全相同的代码,它确实具有所需的功能:一条将 map 的一部分围起来的路径。

问题是 draw() 方法将一遍又一遍地调用我的双 for 循环,性能受到的影响是显而易见的并且令人虚弱。即使将循环放在 draw() 内的 new Thread() 中也无助于提高性能。在构造函数中运行它是理想的,但是路径不会随着 map 平移。

类似地在draw() 方法中放置一个私有(private) bool 翻转,使所需的代码只运行,也不起作用。除非不断重绘,否则路径不会出现在 map 上,这是一项非常艰巨的任务。

这个网站上关于这个问题的其他答案的问题是人们正在制作正方形、圆形和图像,这只需要在 draw() 中调用一次,而不是生成路径的循环。

建议? draw() 方法有助于叠加贴在 map 上,我怎样才能只运行一次 for 循环

最佳答案

一些注意事项:

  1. 您不应覆盖 draw() 方法。 Overlay 类已经为您处理了整个平移操作。阅读您会找到它的文档。

  2. 新 API 的使用方便几千倍。使用简单的代码,例如:

    PolylineOptions p = new new PolylineOptions().width(3).color(0xFFEE8888);
    for( //... first for .... ){
    for( // .... how many you'll need to nest... ){
    // compute your JSON and get lat/long pair
    p.add(new LatLng(lat, lon));
    }
    }
    getMap().addPolyline(p);

让 map 类处理平移和缩放。

关于Android map ,在 Overlay 构造函数中绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13938366/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com