0

如果我尝试在我的 Android 应用程序的 View 派生类中的 onDraw 期间分配任何内存,Eclipse/lint 会警告我在执行 onDraw 期间不应该分配内存。所以我试图想出将旋转的矩形附加到可能用于定义剪切边界的路径的最佳方法。我还想弄清楚如何将旋转的椭圆添加到这样的路径中。

我考虑过使用 Matrix.mapPoints 和矩形的 4 个角(使用预先分配的矩阵),但我目前没有预先分配的浮点数组来使用它,我不确定我想要如果有另一种方法,可以这样做。我应该使用 Math.atan2 来获取极坐标,偏移结果,然后使用 sin 和 cos 来计算新坐标,还是会比矩阵乘法有更多的开销?

是否有其他方法可以将旋转的矩形和椭圆添加到我应该考虑的剪切边界?

编辑:我也不清楚调用其他具有局部变量的函数是否会被视为内存分配。如果我创建这样的函数:

private void drawOperation(Operation op, Canvas canvas) {
    float coords[] = {0,0,0,0,0,0,0,0};
    ....
}

该数组是在堆还是堆栈上创建的?它是否仍然构成在 onDraw 期间应该避免的事情?

4

1 回答 1

0

我正在考虑这样的代码,其中 mMatrix、mRotationPath、mPoint 和 mPath 是预分配的对象:

mMatrix.setRotate(angle, mPoint.x, mPoint.y);
mRotationPath.rewind();
mRotationPath.addRect(mRect, Path.Direction.CW);
mPath.addPath(mRotationPath, mMatrix);
于 2013-03-03T16:42:15.163 回答