【问题标题】:Android canvas path real-time performanceAndroid画布路径实时表现
【发布时间】:2011-09-27 23:21:46
【问题描述】:

我想在 15 分钟内绘制(4 或 5 个)实时图表,以可视化大量数据(每 30 毫秒一个新值)。我正在使用 Path,但是当我想显示超过 20000 个值并翻译画布时,它似乎工作得非常缓慢,并且每秒都变得更糟。我也尝试过使用 drawLine 但它根本不能流畅地工作。

有人对比 Path 更好的解决方案有任何想法吗?或者我做错了什么?我目前的解决方案是:我在开始时初始化路径,然后每次获得新值时添加一个新行,然后我翻译画布。

【问题讨论】:

  • 也许有人知道为什么画一条线然后翻译画布是如此缓慢以至于中断是可见的并且它不能流畅地工作?

标签: android performance canvas path real-time


【解决方案1】:

是否在每个 onDraw() 中绘制所有这些?这就是为什么它很慢。首先,没有人能看到每 30 毫秒的变化。因此,不断将更新绘制到缓存位图中,然后调用 invalidate()。然后在 onDraw() 中将该位图复制到画布上。

【讨论】:

  • 嗨,在这里发帖有点晚了。但是你能帮我谈谈你的超级想法,如何实现它?
【解决方案2】:

无论您使用什么方法,显示包含 20 000 个值的路径都可能会很慢,即使在 OpenGL 中,也只是将大量数据发送到图形芯片进行绘制...

做到这一点的“正确”方法(性能方面)可能是缓存尽可能多的东西,并且只绘制需要绘制的东西。例如,您可以将前 N 个点绘制到位图,然后只为接下来的 M 个点使用路径(并为前面的点绘制位图)。绘制位图非常快。所以偶尔,你可以刷新你的位图(这需要更多时间),然后绘制剩余的点。

您还可以决定采用更短的路径:您真的需要 20 000 个值吗?您不能将点 5 x 5 或 10 x 10(甚至更多)分组吗?目前,屏幕的宽度最多为 1280 像素...

【讨论】:

    【解决方案3】:

    无论如何,用画布绘制超过 20000 条线会很慢。我敢打赌,你必须在这个上使用 openGL。此链接可能会有所帮助:http://obviam.net/index.php/opengl-es-with-android-switching-from-canvas-to-opengl/

    【讨论】:

    • 我宁愿不使用 OpenGL,因为我必须重写几乎所有的东西。但是如果没有其他解决方案,我会尝试一下。
    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    相关资源
    最近更新 更多