滚动视图内的onDraw自定义视图
我有一个自定义视图(宽度= 2000)内水平滚动视图(宽度= 480)。 所以有一个可滚动的区域。
当调用onDraw()
,脏矩形(由getClipBounds()
返回)返回整个视图的尺寸,所以我绘制整个视图,包括不可见的区域。 因此,当我滚动时, onDraw()
不再被调用,因为变得可见的区域已经被绘制并以某种方式被记住。
public void onDraw(Canvas canvas)
{
canvas.getClipBounds(r); // returns 2000 x 400
}
这工作正常!
但是,我的自定义视图可能高达20,000或更多,并且事情开始变慢。 我担心的是缓存的绘图使用大量的内存。 我不认为绘图被保存为位图,因为它已经崩溃了,那么这些绘图命令(主要是线和文本)如何被保存? 有没有一种方法可以指定onDraw()
只应该请求视图的可见部分,并且在滚动时一直调用onDraw()
? 或者还有其他方法吗?
谢谢!
自Android 3.0以来,Android使用硬件加速的“显示列表”进行绘图。 这会导致整个视图的显示列表被缓存。
如果ScrollView中的视图非常大,则可以禁用该视图的硬件加速。
我们通过onAttachedToWindow()
ScrollView并使用以下代码重写onAttachedToWindow()
方法来实现这一点:
@Override
protected void onAttachedToWindow()
{
setLayerType(LAYER_TYPE_SOFTWARE, null);
}
链接地址: http://www.djcxy.com/p/19397.html