【发布时间】:2015-10-27 18:54:15
【问题描述】:
我有一个相对布局,其中包含同一个自定义视图类的三个全屏子视图。我想知道我是否应该担心记忆。从这个答案来看: Understanding Canvas and Surface concepts
所有视图都通过具有底层位图的同一画布进行绘制,因此内存不会增加三倍。任何人都可以确认吗? 这是有道理的,否则全屏文本视图将非常低效。
奖励:画布的目的是定义位图的可绘制区域并将视图坐标转换为位图坐标吗?
【问题讨论】:
我有一个相对布局,其中包含同一个自定义视图类的三个全屏子视图。我想知道我是否应该担心记忆。从这个答案来看: Understanding Canvas and Surface concepts
所有视图都通过具有底层位图的同一画布进行绘制,因此内存不会增加三倍。任何人都可以确认吗? 这是有道理的,否则全屏文本视图将非常低效。
奖励:画布的目的是定义位图的可绘制区域并将视图坐标转换为位图坐标吗?
【问题讨论】:
根据文档http://developer.android.com/guide/topics/graphics/2d-graphics.html#draw-with-canvas:
当您编写一个应用程序时,您希望在其中执行专门的绘图和/或控制图形的动画,您应该通过画布进行绘图。 Canvas 为您充当一个伪装或界面,您将在其上绘制图形的实际表面——它包含您所有的“绘制”调用。通过 Canvas,您的绘图实际上是在放置在窗口中的底层位图上执行的。
在onDraw(Canvas canvas) 中,您将获得一个canvas 对象。这个canvas 有一个底层bitmap。并非所有视图都被赋予相同的画布。画布只是普通bitmap(屏幕上的像素)之上的一层。 canvas 让您可以随心所欲地操纵bitmap。所以每个视图都有一个画布,但不是它自己的位图。
所以不,就内存而言,三视图并不意味着内存增加三倍,因为只有one 位图。但是,您可以创建自己的bitmap,如果这样做,那么您将在记忆中慢跑。如果您创建 3 个屏幕大小的位图,您的内存将增加三倍。
【讨论】: