如何避免在onDraw上创建一个Rect对象

时间:2015-06-28 14:43:06

标签: android memory canvas android-linearlayout ondraw

在我的应用程序中,我创建了覆盖LinearLayout的LinearLayout类,以便按需编程设置边框和其他图形(即填充自定义颜色)。问题是在onDraw的第一行我必须得到布局Rect,如下所示:

@Override
protected void onDraw(Canvas canvas) {
    r = canvas.getClipBounds() ;

问题是我收到了警告:

在绘制操作期间避免对象分配:使用Canvas.getClipBounds(Rect)而不是分配临时Rect的Canvas.getClipBounds()。

虽然我知道上面的代码浪费了内存资源,但我找不到应用 Canvas.getClipBounds(Rect)来实现相同的方法。如果有人以更加记忆友好的方式指出我的方式,我将不胜感激。

提前谢谢。

1 个答案:

答案 0 :(得分:3)

在调用视图的构造函数时创建Rect,或同时声明并实例化它。 E.g。

Rect mRect = new Rect();

onDraw

@Override
protected void onDraw(Canvas canvas) {
    canvas.getClipBounds(mRect) ;
    // read the properties of mRect