我有一个relativelayout,有三个同一个自定义视图类的全屏子视图。我想知道我是否应该担心记忆。从这个答案判断: Understanding Canvas and Surface concepts
所有视图都通过相同的画布传递,并使用基础位图进行绘制,以便内存不会增加三倍。谁能确认一下? 这是有道理的,否则全屏幕文本视图将是非常低效的。
Bonus:画布的目的是定义位图的可绘制区域并将视图坐标转换为位图坐标吗?
答案 0 :(得分:2)
根据文档http://developer.android.com/guide/topics/graphics/2d-graphics.html#draw-with-canvas:
当您编写要在其中执行专门绘图和/或控制图形动画的应用程序时,您应该通过绘制Canvas来实现。 Canvas可以作为一个伪装或界面,用于绘制图形的实际表面 - 它可以保存所有“绘制”调用。通过画布,您的绘图实际上是在底层的位图上执行的,该位图放在窗口中。
在onDraw(Canvas canvas)
中,您将获得canvas
个对象。此canvas
有一个基础bitmap
。所有视图都没有给出相同的画布。 Canvas只是普通bitmap
上方的一层(屏幕上的像素)。 canvas
可让您根据需要操纵bitmap
。所以每个视图都有一个画布,但不是它自己的位图。
所以不,就内存而言,三个视图并不意味着内存增加了三倍,因为只有one
位图。然而,你可以创建自己的bitmap
,如果你这样做,那么你将慢慢记忆。如果您创建3个位图,屏幕大小,您的内存将增加三倍。