2013-08-03 72 views
8

Tôi đang cố gắng xoay canvas quanh tâm của màn hình, để có được tọa độ (0,0) ở dưới cùng bên phải.Android: xoay canvas quanh tâm màn hình

Đây là cách tôi làm điều đó:

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth(); 
int height = display.getHeight(); 
canvas.rotate(180, width/2, height/2); 

Nó xoay một cách chính xác, và mọi thứ đều hoàn hảo tại AVD với mức API 17. Nhưng trên AVD với mức API 8 (0,0) phối hợp xuất hiện ở vị trí sai. Trước khi xoay hình ảnh đã được lắp toàn bộ màn hình ở thiết bị này quá, nhưng bây giờ nó trông như thế này:

enter image description here

những gì đang gây ra vấn đề?

* CHỈNH SỬA!

Vấn đề đã được giải quyết bằng cách xoay canvas quanh điểm giữa của riêng mình:

canvas.rotate(180,canvas.getWidth()/2,canvas.getHeight()/2); 

Nhưng vẫn còn, tại sao không phải là phiên bản làm việc trước với các API cũ?

Trả lời

0

Không phải lúc nào cũng cần thiết cho CanvasDisplay có cùng kích thước. Display.getWidth() không được dùng nữa và thay vào đó bạn nên sử dụng Display.getSize(). Từ số documentation:

Lấy kích thước của màn hình, tính bằng pixel.

Lưu ý rằng giá trị này không nên được sử dụng cho bố trí máy tính, kể từ khi một thiết bị thường sẽ có trang trí màn hình (chẳng hạn như một thanh trạng thái) dọc theo các cạnh của màn hình làm giảm số lượng ứng dụng không gian có sẵn từ kích thước được trả lại ở đây. Thay vào đó, bố cục nên sử dụng kích thước cửa sổ.

Vì vậy, trong trường hợp canvas chuyển đổi ma trận, luôn luôn sử dụng canvas như tài liệu tham khảo chứ không phải là hiển thị hoặc cửa sổ, vì vải sẽ cho giá trị chính xác. Vì vậy, để xoay vải xung quanh trung tâm, bạn cần trung tâm của canvas.

Trung tâm của canvas là (canvas.getWidth()/2 , canvas.getHeight()/2)

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