我有一个自定义视图(宽度为2000),位于一个水平滚动视图内(宽度为480)。因此,有一个可滚动的区域。
当调用
这很好运行!
然而,我的自定义视图可能会达到20000或更多像素宽,这时速度开始变慢。我担心缓存的绘画使用了大量内存。我认为绘制没有被保存为位图,否则它已经崩溃了,那么这些绘制命令(主要是线条和文本)是如何保存的呢? 有没有一种方式可以指定只请求视图的可见部分,当滚动时保持调用
当调用
onDraw()
时,脏矩形(由 getClipBounds()
返回)返回整个视图的尺寸,因此我绘制整个视图,包括不可见的区域。因此,在滚动时, onDraw()
不再被调用,因为已经绘制了变得可见的区域,并且某种程度上被记住了。public void onDraw(Canvas canvas)
{
canvas.getClipBounds(r); // returns 2000 x 400
}
这很好运行!
然而,我的自定义视图可能会达到20000或更多像素宽,这时速度开始变慢。我担心缓存的绘画使用了大量内存。我认为绘制没有被保存为位图,否则它已经崩溃了,那么这些绘制命令(主要是线条和文本)是如何保存的呢? 有没有一种方式可以指定只请求视图的可见部分,当滚动时保持调用
onDraw()
?或者有其他方法吗?
谢谢!