1

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

4

2 回答 2

4

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

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

除此之外,您可以考虑使用除 View 之外的其他渲染,也可以查看 SurfaceView。

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

于 2012-02-29T16:40:49.673 回答
1

从技术上讲,画布绘制在位图上。所以实际上是比屏幕大的位图。为什么要让位图比屏幕大?更大的位图 = 更多的内存使用 - 这可能会减慢速度。您只是在屏幕的裁剪范围内真正绘图 - 您可能认为您正在屏幕外绘图,但事实并非如此。在另一个位图上绘图对您没有帮助 - 您已经在这样做了。无需查看您的代码,您可以尝试:

  • invalidate(rect)仅通过调用which 仅重新绘制已更改的内容来绘制二叉树中的更改
  • 如果您的二叉树是静态的,只需创建它的 png/jpg 并显示该图像而不是自己绘制它
  • 确保你调用的 invalidate 没有超出你的需要
于 2012-02-29T16:52:12.617 回答