View的可见性检查
- getLeft()、getTop()、getRight()、getBottom()
- getX()、getY()、getRawX()、getRawY()
- getLocationOnScreen()
- getLocationInWindow()
- getGlobalVisibleRect()
- getLocalVisibleRect()
方式一:getLeft()/getTop()/getRight()/getBottom()
获取当前View相对于父View的坐标
view.getLeft()
view.getTop()
view.getRight()
view.getBottom()
方式二:getX()/getY()/getRawX()/getRawY()
获取点击事件相对直接控件的发生坐标或相对屏幕的坐标
MotionEvent event
event.getX()
event.getY()
event.getRawX()
event.getRawY()
方式三:getLocationOnScreen()
获取当前View相对于屏幕的坐标
int[] location = new int[2];
view.getLocationOnScreen(location);
// view距离屏幕左边的距离
int x = location[0];
// view距离屏幕顶边的距离
int y = location[1];
// 在view.post(Runnable)里获取,即等布局变化后
方式四:getLocationInWindow()
获取当前View相对于所在Window的坐标
int[] location = new int[2];
view.getLocationInWindow(location);
// view距离window左边的距离
int x = location[0];
// view距离window顶边的距离
int y = location[1];
// 在onWindowFocusChanged()里获取,即等window窗口发生变化后
方式五:getGlobalVisibleRect()
获取View可见部分相对于屏幕的坐标
Rect rect = new Rect();
view.getGlobalVisibleRect(rect);
int left = rect.getLeft();
int top = rect.getTop();
int right = rect.getRight();
int bottom = rect.getBottom();
方式六:getLocalVisibleRect()
获取View可见部分相对于自身View左上角的坐标
Rect rect = new Rect();
view.getLoacalVisibleRect(rect);
int left = rect.getLeft();
int top = rect.getTop();
int right = rect.getRight();
int bottom = rect.getBottom();
注意:getGlobalVisibleRect与getLocalVisibleRect在View完全不可见的情况下返回的Rect实例的坐标为相对屏幕原点的坐标,且当View处在屏幕上方时,top和bottom为负值。
[站外图片上传中...(image-f0af2b-1593425845677)]
例子中的tv10和tv9完全不可见,所以其返回的Rect坐标是相对于屏幕原点的坐标。