2011-02-03 39 views
8

Làm cách nào để có được vị trí dịch hiện tại từ Canvas? Tôi đang cố gắng để vẽ những thứ mà tọa độ của tôi là một sự kết hợp của tương đối (với nhau) và tuyệt đối (để canvas).Cách tìm vị trí dịch hiện tại trong Canvas?

phép nói rằng tôi muốn làm

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 

này hoạt động nhưng là bẩn:

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); 

Các canvas có một phương pháp getMatrix, nó có một setTranslate nhưng không getTranslate. Tôi không muốn sử dụng canvas.save()canvas.restore() vì cách tôi vẽ mọi thứ hơi phức tạp (và có thể lộn xộn ...)

Có cách nào để có được các tọa độ hiện tại không?

Trả lời

0

Trước tiên, bạn cần đặt lại ma trận chuyển đổi. Tôi không phải là một nhà phát triển Android, nhìn vào android canvas docs, không có ma trận đặt lại, nhưng có một setMatrix (android.graphics.Matrix). Nó nói nếu ma trận đã cho là null, nó sẽ đặt ma trận hiện tại thành ma trận nhận dạng, đó là những gì bạn muốn. Vì vậy, tôi nghĩ bạn có thể đặt lại vị trí của mình (và chia tỷ lệ và nghiêng) với:

canvas.setMatrix(null); 

Cũng có thể nhận bản dịch hiện tại qua getMatrix. Có một phương thức mapVectors() bạn có thể sử dụng cho matrices để xem điểm [0,0] sẽ được ánh xạ tới đâu, đây sẽ là bản dịch của bạn. Nhưng trong trường hợp của bạn, tôi nghĩ rằng đặt lại ma trận là tốt nhất.

Các vấn đề liên quan