2009-09-11 21 views

Trả lời

60

Bạn có thể muốn sử dụng các cho tọa độ tuyệt đối (tuyệt đối, liên quan đến màn hình của thiết bị):

MotionEvent.getRawX()

MotionEvent.getRawY()

Các phương pháp khác, getX()getY(), nên trả lại cho bạn tọa độ liên quan đến số View gửi đi.

+6

Tôi đã giải quyết được vấn đề của mình bằng cách sử dụng getRawX() và getRawY() đã nói. Tuy nhiên, tôi thấy nó là một giải pháp đáng buồn vì nó gợi ý rằng getX() và getY() là vô dụng, mặc dù nó cảm thấy như chúng phải là các phương thức linh trưởng cho lớp MotionEvent. Phải có một giải pháp thanh lịch hơn. – PeyloW

+1

Tuyệt vời, bạn đã cứu tôi đau đầu trong tương lai. – Tom

+6

Mặc dù (đúng) { System.out.println ("cảm ơn"); } –

33

Đây là giới hạn trên nền tảng Android.

MotionEvent đôi khi sẽ trả lại tọa độ X và Y tuyệt đối tương ứng với chế độ xem và đôi khi tương quan với tọa độ của sự kiện chuyển động trước đó.

Sự kiện được gửi dưới dạng ACTION_DOWN sẽ luôn tuyệt đối, tất cả các sự kiện khác sẽ thay đổi. Không có cách nào để yêu cầu MotionEvent cho loại tọa độ hiện tại.

Điều này có nghĩa rằng trong thực tế getX()getY() là vô dụng đối với nhiều trường hợp sử dụng, và bạn nên căn cứ logic ứng dụng của bạn trên getRawX()getRawY() được đảm bảo để trở về tọa độ tuyệt đối, tương đối so với màn hình điện thoại.

+3

Đây có phải là trường hợp không? Tôi đang tìm getX một getY để làm việc tốt cho các tọa độ tương đối ... – jjxtra

4

Khi sử dụng MapView, tôi có thể nhận tọa độ X và Y tương đối bằng cách trừ View.getLeft() và View.getTop() của chế độ xem nội dung của Window (Window.ID_ANDROID_CONTENT) từ MotionEvent.getRawX () và MotionEvent.getRawY(), tương ứng.

Các giải pháp được thảo luận ở đây:

http://andmobidev.blogspot.com/2010/01/getting-relative-coordinates-from.html

này nên làm việc để xác định tương đối X và Y tọa độ trong giao diện bố cục chính.

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