3

我在画布上画了一个椭圆:

RectF f = new RectF(-r, -r, r, r);
canvas.drawOval(f , mPaint);  

为什么我在 RectF 上看到警告?

在绘制/布局操作期间避免对象分配(改为预分配和重用)

4

2 回答 2

14

就像它所说的那样:每次绘制任何东西时,做一个new RectF内部都会创建一个对象。onDraw这可能是很多对象。只需使用一个RectF

RectF mRect = new RectF();

protected void onDraw(Canvas canvas) {
    mRect.set(-r, -r, r, r);
    canvas.drawOval(mRect, mPaint);
}

只是要清楚:您的原始代码在逻辑上是正确的。这只是一种性能改进(尽管很重要)。

于 2012-11-22T20:16:47.690 回答
2

只需创建一次 RectF 对象并在每次绘制时重复使用它,否则您将创建过多的 RectF 对象,这可能会影响性能。

于 2012-11-22T20:16:13.720 回答