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

Android 如何避免在onDraw上创建Rect对象,android,memory,canvas,android-linearlayout,ondraw,Android,Memory,Canvas,Android Linearlayout,Ondraw,在我的应用程序中,我创建了覆盖LinearLayout的LinearLayout类,以便通过编程方式在其周围设置边框,并根据需要设置其他图形(即使用自定义颜色填充)。问题是,在onDraw的第一行中,我必须获得布局Rect,如下所示: @Override protected void onDraw(Canvas canvas) { r = canvas.getClipBounds() ; 问题是我得到了警告: 在绘制操作期间避免对象分配:使用Canvas.getClipBounds(R

在我的应用程序中,我创建了覆盖LinearLayout的LinearLayout类,以便通过编程方式在其周围设置边框,并根据需要设置其他图形(即使用自定义颜色填充)。问题是,在onDraw的第一行中,我必须获得布局Rect,如下所示:

@Override
protected void onDraw(Canvas canvas) {
    r = canvas.getClipBounds() ;
问题是我得到了警告:

在绘制操作期间避免对象分配:使用Canvas.getClipBounds(Rect)代替Canvas.getClipBounds(),后者分配一个临时Rect

虽然我知道上面的代码是在浪费内存资源,但我找不到方法应用Canvas.getClipBounds(Rect)来做同样的事情。如果有人能指点我,让我用一种更方便记忆的方式来做这件事,我将不胜感激


提前感谢。

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

Rect mRect = new Rect();
onDraw

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

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

Rect mRect = new Rect();
onDraw

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