滚动视图内的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

上一篇: onDraw Custom View inside a Scrollview

下一篇: Spring Data Rest ManytoMany POST