0

約のドキュメントは次のように述べていCanvas.setMatrix()ます。

現在の行列を指定された行列に完全に置き換えます。行列パラメーターが null の場合、現在の行列は単位にリセットされます。

そして、次のようにCanvas.concat()言います。

現在の行列を指定された行列と事前に連結します。

しかし、それは不自然に思えます。このコードを試したとき:

Matrix matrix = new Matrix();
mCamera = new Camera();
canvas.save();

mCamera.rotateY(y_rotate_angle);
mCamera.getMatrix(matrix);
canvas.concat(matrix);
canvas.drawText(text, 30, 100, redPaint);

//      canvas.restore();
canvas.setMatrix(null);
canvas.setMatrix(matrix);
canvas.drawText(text, 30, 100, greenPaint);

その結果、2 番目のテキストは(30,100) で描画する代わりに(60,100)で描画されます (試しcanvas.restore()てコメントした場合でもcanvas.setMatrix)。

4

1 に答える 1

0

変です!保存する前にキャンバスのマトリックスを取得し、そのメンバーを出力します.マトリックスであると推測しましたがIDENTITY、そうではありませんでした!そうするとsetMatrix(null)、キャンバスのマトリックスは、元のマトリックスと等しくないマトリックスによって設定されましたキャンバスのマトリックスとこれが問題を引き起こしました。

于 2012-11-23T08:04:42.987 に答える