Android:地图绘制性能,1K 绘图!

发布于 2024-11-19 10:28:32 字数 233 浏览 2 评论 0原文

所以我有一个应用程序可以在开放街道地图上绘制直线、折线、圆等。 我保留了一个绘图列表,当地图无效时,我会迭代列表,重新绘制 Overlay 的 onDraw 方法中的每个项目。在我的绘图数量达到 300+ 左右之前,这一切都很好。然后出现一些严重的 UI 延迟。

我正在寻找一种有效的方法来做到这一点?

我已经在“板”绘图应用程序上完成了位图缓存绘图。尽管这不适用于这种情况,因为背景中的投影可以改变,因此绘图必须移动。

So I have an application that draws line, polyline, circles, etc over an Open Streen Map.
I keep a list of drawings, when the map is invalidated I iterate though the list redrawing each item within the onDraw method of an Overlay. This works fine until my drawing count gets around 300+. Then some serious UI delay kicks in.

I'm looking for an efficient way to do this?

I've done bitmap cache drawing on a "board" drawing application. Although that will not work for this situation as the projection in the background can change, thus the drawing must move.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

白况 2024-11-26 10:28:32

我正在保存 GeoPoints,然后在每次重绘期间对“MapView Point”进行大量转换。结果投影有一个“中间点”,可以存储并轻松投影到“MapView 点”。所以繁重的计算部分只完成一次。

使用 (fromPixels)将

  • Motion Event(x,y) 步进到 GeoPoint 使用
  • (toMapPixelsProjected) 将 GeoPoint 步进到中间值
  • 缓存绘图显示的中间值
  • OnDraw ->使用 (toMapPixelsTranslated) 将中间值转换为屏幕坐标

I was saving GeoPoints and then doing a heavy conversion to the "MapView Point" during each redraw. Turns out the Projection has an "Intermediate Point" which can be stored and easily projected to the "MapView Point". So the heavy computational part only done once.

Steps

  • Motion Event(x,y) to GeoPoint using (fromPixels)
  • GeoPoint to Intermediate value using (toMapPixelsProjected)
  • Cache the intermediate values for drawing display
  • OnDraw -> intermediate values to screen coordinates using (toMapPixelsTranslated)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文