Nếu tôi biết tọa độ (X, Y) pixel (theo phương pháp OnTouchEvent và getX(), getY) cách tôi có thể tìm phần tử cũ. nút hoặc văn bản vv .... bằng cách sử dụng X, YCách tìm phần tử trong Xem theo tọa độ x, y Android
Trả lời
Bạn có thể sử dụng getHitRect(outRect)
của mỗi đứa trẻ Xem và kiểm tra xem điểm có nằm trong Hình chữ nhật kết quả không. Đây là một mẫu nhanh.
for(int _numChildren = getChildCount(); --_numChildren)
{
View _child = getChildAt(_numChildren);
Rect _bounds = new Rect();
_child.getHitRect(_bounds);
if (_bounds.contains(x, y)
// In View = true!!!
}
Hope this helps,
FuzzicalLogic
sử dụng Android dispatchKeyEvent/dispatchTouchEvent để tìm ra chánh kiến để xử lý chủ chốt/cảm ứng sự kiện, đó là một thủ tục phức tạp. Vì có thể có nhiều khung nhìn che phủ điểm (x, y).
Nhưng thật đơn giản nếu bạn chỉ muốn tìm giao diện trên cùng nhất bao gồm điểm (x, y).
1 Sử dụng getLocationOnScreen() để lấy vị trí absoulte.
2 Sử dụng getWidth(), getHeight() để tìm hiểu xem chế độ xem có bao gồm điểm (x, y) hay không.
3 Làm giảm mức độ xem trong toàn bộ cây xem. (Gọi getParent() đệ quy hoặc sử dụng một số phương pháp tìm kiếm)
4 Tìm chế độ xem bao gồm cả điểm và có cấp độ lớn nhất.
Câu trả lời hoàn chỉnh hơn một chút chấp nhận bất kỳ ViewGroup
và sẽ đệ quy tìm kiếm chế độ xem tại x, y đã cho.
private View findViewAt(ViewGroup viewGroup, int x, int y) {
for(int i = 0; i < viewGroup.getChildCount(); i++) {
View child = viewGroup.getChildAt(i);
if (child instanceof ViewGroup) {
View foundView = findViewAt((ViewGroup) child, x, y);
if (foundView != null && foundView.isShown()) {
return foundView;
}
} else {
int[] location = new int[2];
child.getLocationOnScreen(location);
Rect rect = new Rect(location[0], location[1], location[0] + child.getWidth(), location[1] + child.getHeight());
if (rect.contains(x, y)) {
return child;
}
}
}
return null;
}
Các giải pháp tương tự như https://stackoverflow.com/a/10959466/2557258 nhưng trong Kotlin:
fun getViewByCoordinates(viewGroup: ViewGroup, x: Float, y: Float) : View? {
(0 until viewGroup.childCount)
.map { viewGroup.getChildAt(it) }
.forEach {
val bounds = Rect()
it.getHitRect(bounds)
if (bounds.contains(x.toInt(), y.toInt())) {
return it
}
}
return null
}
- 1. nhận tọa độ X và Y cho phần tử div
- 2. Lấy tọa độ X & Y của một nút trong Android?
- 3. Tìm X/Y của phần tử HTML có JavaScript
- 4. Ràng buộc với tọa độ X Y của phần tử trên Vải WPF
- 5. Điều khiển bật lên WPF - Tìm tọa độ X, Y
- 6. Định vị phần tử DOM theo tọa độ tuyệt đối
- 7. Theo dõi Android x, y tọa độ vẽ từ Đường dẫn
- 8. Tìm khoảng cách tối đa giữa các tọa độ (x, y)
- 9. Đặt các thành phần theo các tọa độ tùy ý (x, y)
- 10. Tìm một phần tử trong SVG trong Opera theo tọa độ
- 11. Tìm chế độ xem với các hợp âm x/y đã cho trong android
- 12. Các lần chạm trên iOS đến tọa độ xem x/y của thiết bị qua Javascript
- 13. Cài đặt nhãn không x, y tọa độ theo chương trình
- 14. Chụp x, y Tọa độ với Python PIL
- 15. gnuplot: Vẽ X, Y tọa độ và nhãn của họ
- 16. Tính tọa độ mới từ tọa độ cũ và x và y
- 17. Thay thế các phần tử trong ma trận theo các tọa độ trong MATLAB
- 18. Đọc tọa độ x y z của điện thoại android bằng gia tốc
- 19. Chuyển đổi độ dài/vĩ độ thành các tọa độ X/Y
- 20. Màn hình Android OpenGL ES 2.0 tọa độ theo tọa độ thế giới
- 21. Tọa độ tài liệu jQuery x y của đối tượng DOM
- 22. Chuyển đổi độ dài/vĩ độ thành các tọa độ X/Y
- 23. Cách tìm tọa độ trung tâm x của phần tử và bù trừ cửa sổ liên quan
- 24. Nhận tọa độ x, y mới của một điểm trong hình ảnh được xoay
- 25. Với toạ độ x, y, tôi cần phải tìm tất cả các phần tử html bên dưới nó
- 26. Nhận tọa độ X và Y của một từ trong UITextView
- 27. Theo dõi mắt: tìm học sinh (x, y)
- 28. Dữ liệu lô gnuplot từ hai tệp: trong một tọa độ x, trong các y khác
- 29. tìm vị trí {x, y} của văn bản trong uilabel
- 30. Tọa độ chạm trong chế độ xem văn bản
Tôi đã thử và nó hoạt động. –
Hoạt động tốt nhưng có vẻ như đứa trẻ có thể là null, vì vậy cần kiểm tra để ngăn chặn NullPointerException. –
nó hoạt động hoàn hảo. –