如何避免在 onDraw 时创建 Rect 对象

How to avoid creating a Rect object onDraw

在我的应用程序中,我创建了我的 LinearLayout class 覆盖 LinearLayout 以便以编程方式设置它周围的边框和其他需要的图形(即填充自定义颜色)。问题是在 onDraw 的第一行中,我必须按如下方式获取布局 Rect:

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

问题是我收到警告:

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

虽然我知道上面的代码在浪费内存资源,但我找不到方法来应用 Canvas.getClipBounds(Rect) 来做同样的事情。如果有人告诉我如何以更利于记忆的方式执行此操作,我将不胜感激。

提前致谢。

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

Rect mRect = new Rect();

onDraw

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