我创建了一个调用DrawView扩展View的活动,我在Canvas上绘制类似二叉树的东西。画布大小大于屏幕大小,onDraw函数绘制所有画布,而不仅仅是画面的可见部分。我添加了一个水平和垂直scrollView,显然onDraw一次又一次地调用以刷新视图。 我想知道是否可以使用该图像在图像(位图或类似的东西)上绘制画布来显示树,而无需调用onDraw函数。 如果我不能这样做,我该怎么做以获得更快的视图?
答案 0 :(得分:4)
如果您使用的是API 11或更高版本,则可以尝试使用清单中应用程序标记中的硬件加速属性。
<application ... android:hardwareAccelerated="true" ...>
除此之外,你可以考虑使用另一种渲染而不是View,也可以看看SurfaceView。
一般来说,我认为你不应该覆盖View,除非你正在构建一个UI组件(比如Button),不要引用我这个。
答案 1 :(得分:1)
从技术上讲,画布绘制了一个Bitmap。所以它实际上比位图大于屏幕。为什么要使Bitmap大于屏幕?更大的位图=更多的内存使用 - 这可能会使事情变得缓慢。你只能在屏幕的剪切范围内绘制 - 你可能认为你正在画屏幕,但你不是。使用另一个Bitmap对你没有帮助 - 你已经在做了。无需查看代码,您可以尝试:
invalidate(rect)
来绘制二进制树中的更改,该{{1}}仅重新绘制已更改的内容