Android:如何获得更快的onDraw()

时间:2012-02-29 16:31:55

标签: android view canvas bitmap ondraw

我创建了一个调用DrawView扩展View的活动,我在Canvas上绘制类似二叉树的东西。画布大小大于屏幕大小,onDraw函数绘制所有画布,而不仅仅是画面的可见部分。我添加了一个水平和垂直scrollView,显然onDraw一次又一次地调用以刷新视图。 我想知道是否可以使用该图像在图像(位图或类似的东西)上绘制画布来显示树,而无需调用onDraw函数。 如果我不能这样做,我该怎么做以获得更快的视图?

2 个答案:

答案 0 :(得分:4)

如果您使用的是API 11或更高版本,则可以尝试使用清单中应用程序标记中的硬件加速属性。

<application ... android:hardwareAccelerated="true" ...>

除此之外,你可以考虑使用另一种渲染而不是View,也可以看看SurfaceView。

一般来说,我认为你不应该覆盖View,除非你正在构建一个UI组件(比如Button),不要引用我这个。

答案 1 :(得分:1)

从技术上讲,画布绘制了一个Bitmap。所以它实际上比位图大于屏幕。为什么要使Bitmap大于屏幕?更大的位图=更多的内存使用 - 这可能会使事情变得缓慢。你只能在屏幕的剪切范围内绘制 - 你可能认为你正在画屏幕,但你不是。使用另一个Bitmap对你没有帮助 - 你已经在做了。无需查看代码,您可以尝试:

  • 仅通过调用invalidate(rect)来绘制二进制树中的更改,该{{1}}仅重新绘制已更改的内容
  • 如果你的二进制树是静态的,只需创建它的png / jpg并显示该图像而不是自己绘制它
  • 确保你没有比你需要的更多地召唤无效