Tôi đang cố gắng để có được tọa độ pixel màn hình tuyệt đối của góc trên cùng bên trái của chế độ xem. Tuy nhiên, tất cả các phương pháp tôi có thể tìm thấy getLeft()
và getRight()
không hoạt động vì tất cả chúng đều có vẻ tương đối với cha mẹ của chế độ xem, do đó mang lại cho tôi 0
. Cách thích hợp để làm điều này là gì?
Nếu nó hữu ích, đây là một trò chơi 'đưa hình ảnh trở lại theo thứ tự'. Tôi muốn người dùng có thể vẽ một hộp để chọn nhiều mảnh. Giả định của tôi là cách dễ nhất để làm điều đó là để getRawX()
và getRawY()
từ MotionEvent
và sau đó so sánh những giá trị so với góc trên cùng bên trái của bố trí giữ miếng. Biết kích thước của các mảnh, sau đó tôi có thể xác định có bao nhiêu mảnh đã được chọn. Tôi nhận ra rằng tôi có thể sử dụng getX()
và getY()
trên MotionEvent
, nhưng điều đó trả về một vị trí tương đối khiến cho việc xác định phần nào được chọn khó khăn hơn. (Không phải là không thể, tôi biết, nhưng nó có vẻ phức tạp không cần thiết).
Chỉnh sửa: Đây là mã tôi đã sử dụng để cố gắng lấy kích thước của hộp chứa, theo một trong các câu hỏi. TableLayout
là cái bàn chứa tất cả các mảnh ghép.
TableLayout tableLayout = (TableLayout) findViewById(R.id.tableLayout);
Log.d(LOG_TAG, "Values " + tableLayout.getTop() + tableLayout.getLeft());
Chỉnh sửa 2: Đây là mã tôi đã thử, sau nhiều câu trả lời được đề xuất.
public int[] tableLayoutCorners = new int[2];
(...)
TableLayout tableLayout = (TableLayout) findViewById(R.id.tableLayout);
tableLayout.requestLayout();
Rect corners = new Rect();
tableLayout.getLocalVisibleRect(corners);
Log.d(LOG_TAG, "Top left " + corners.top + ", " + corners.left + ", " + corners.right
+ ", " + corners.bottom);
cells[4].getLocationOnScreen(tableLayoutCorners);
Log.d(LOG_TAG, "Values " + tableLayoutCorners[0] + ", " + tableLayoutCorners[1]);
Mã này đã được thêm vào sau khi tất cả các khởi tạo được thực hiện. Hình ảnh đã được chia thành một mảng ImageViews (các ô [] mảng) có trong a TableLayout
. Các ô [0] là trên cùng bên trái ImageView
và tôi đã chọn các ô [4] vì nó nằm ở giữa và chắc chắn không nên có tọa độ là (0,0).
Mã được hiển thị ở trên vẫn cung cấp cho tôi tất cả 0 trong nhật ký, điều mà tôi thực sự không hiểu vì các mảnh ghép khác nhau được hiển thị chính xác. (Tôi đã thử int int cho bảngLayoutCorners và khả năng hiển thị mặc định, cả hai đều cho kết quả như nhau.)
Tôi không biết điều này có ý nghĩa gì không, nhưng ImageView
ban đầu chúng không được cung cấp kích thước. Kích thước của ImageView
s được xác định trong quá trình khởi tạo tự động bởi Chế độ xem khi tôi cung cấp cho nó một hình ảnh để hiển thị. Điều này có thể đóng góp cho giá trị của chúng là 0, mặc dù mã đăng nhập là sau khi chúng được cung cấp hình ảnh và tự động thay đổi kích thước? Để có khả năng chống lại điều đó, tôi đã thêm mã tableLayout.requestLayout()
như được hiển thị ở trên, nhưng điều đó không giúp được gì.