0

AndroidアプリのView派生クラスでonDraw中にメモリを割り当てようとすると、Eclipse / lintは、onDrawの実行中にメモリを割り当てるべきではないという警告を表示します。そのため、クリッピング境界の定義に使用される可能性のあるパスに、回転した長方形を追加するための最良の方法を考えようとしています。また、このようなパスに回転した楕円を追加する方法も理解したいと思います。

長方形の4つの角でMatrix.mapPointsを使用することを検討しました(事前に割り当てられた行列を使用)が、現在、それで使用する事前に割り当てられたフロートの配列がありません。別の方法がある場合はそれを行います。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 に答える