2011-02-03 25 views
8

Canvasから現在の翻訳位置を取得するにはどうすればよいですか?私は私の座標が相対的なもの(互いに)と絶対的なもの(キャンバスへ)の組み合わせであるものを描こうとしています。Canvasで現在の翻訳位置を見つけるには?

private static Point getCurrentTranslate(Canvas canvas) { 
    float [] pos = new float [2]; 
    canvas.getMatrix().mapPoints(pos); 
    return new Point((int)pos[0], (int)pos[1]); 
} 
... 
Point p = getCurrentTranslate(canvas); 
canvas.drawSomething(-p.x, -p.y); 

キャンバスがgetMatrix方法を持っている、それはsetTranslateが、無getTranslateがあります

は、これは動作しますが、汚れている、私は

canvas.translate(x1, y1); 
canvas.drawSomething(0, 0); // will show up at (x1, y1), all good 
// now i want to draw a point at x2,y2 
canvas.translate(x2, y2); 
canvas.drawSomething(0, 0); // will show up at (x1+x2, y1+y2) 
// i could do 
canvas.drawSomething(-x1, -y1); 
// but i don't always know those coords 

を行いたいとしましょう。私はcanvas.save()canvas.restore()を使用したくありません。私は物事を描いている方法がちょっと難しいので(おそらく乱雑です...)

これらの現在の座標を取得するクリーナーはありますか?

答えて

0

まず、変換行列をリセットする必要があります。私はアンドロイドの開発者ではなく、android canvas docsを見て、リセットマトリックスはありませんが、setMatrix(android.graphics.Matrix)があります。指定された行列がnullの場合、現在の行列を恒等行列に設定します。これは必要なものです。だから、私はあなたがあなたの位置にリセット(とスケールをとスキュー)することができると思う:

canvas.setMatrix(null); 

またgetMatrixを通じて現在の翻訳を取得することが可能であろう。 matricesに使用できるmapVectors()メソッドがあり、ポイント[0,0]がマップされる場所を確認するには、これがあなたの翻訳になります。しかしあなたの場合、私はマトリックスをリセットするのが最善だと思います。

関連する問題