1. 屏幕座标系区域划分
先看看 android 的屏幕规划图。 可以很明显的看出来, 屏幕的区域划分作用在某一个位置。
android 由左上角顶点位置起始座标,横向X轴开始, 往右正座标, 竖向Y轴开始, 往下正座标。
获取当前屏幕状态信息 APIS
// 获取当前屏幕的宽/高。 分辨率
DisplayMetrics displayMetrics = new DisplayMetrics();
Activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
// 屏幕宽/高状态信息
displayMetrics.widthPixels;
displayMetrics.heightPixels;
// 获取当前状态栏的高度
方式一:
Rect rect = new Rect();
// 获取当前APP的绘制区域, 看上图,包含ActionBar和View的绘制布局区域
getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
rect.top
方式二:
如果当前屏幕隐藏了状态栏的显示, 并且还需要获取状态栏的高度时, 可以通过反射系统的高度属性进行获取
int result = 0;
int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
result = context.getResources().getDimensionPixelSize(resourceId);
}
获取View的座标系APIS
自定义View时, 需要详细知道view在当前屏幕上摆放的位置。 可以通过下列api获取到当前的绝对座标和相对座标系
通过上图可以很清楚的认知到view方法的总结。
View 的方法 | 备注 |
---|---|
getLeft() | 当前View的左边距离父容器的左边距离 |
getTop() | 当前View的上边距离父容器的上边距离 |
getRight() | 当前View的右边距离父容器的右边距离 |
getBottom() | 当前View的下边距离父容器的下边距离 |
getX() | 返回getLeft()+getTranslationX()方法的总和, 当不修改translationX的值时,与getLeft()返回值相同 |
getY() | 返回getTop()+getTranslationY()方法的总和, 当不修改translationY的值时,与geTop()返回值相同 |
getTranslationX() | 水平移动的长度。 通常与动画相互使用 |
getTranslationY() | 垂直移动的长度。 通常与动画相互使用 |
针对触摸时, 获取的视图座标大小 MotionEvent
MotionEvent 的方法 | 备注 |
---|---|
getX() | 获取当前触摸点, 距离当前View的左边间距 |
getY() | 获取当前触摸点, 距离当前View的上边间距 |
getRawX() | 当前触摸点, 距离整体屏幕的X轴座标 |
getRawY() | 当前触摸点, 距离整体屏幕的Y轴座标 |
获取 View 的显示座标区域
View 的方法 | 备注 |
---|---|
getLocalVisibleRect() | 获取当前View位置的显示座标,当前 view 以自己的左上角为起点,另一个点是在自己view的右下角, 返回的X,Y轴座标, 都是相对当前自身View。 |
getGlobalVisibleRect() | 获取当前View位置的显示座标, 当前 View 以屏幕的左上角为起点, 另一个点是自己View的右下角, 返回的X,Y座标。 |
View 的滑动座标系
View的滑动方法 | 效果及描述 |
---|---|
offsetLeftAndRight(int offset) | 横向座标滑动, 会改变当前view的真实位置。 |
offsetTopAndBottom(int offset) | 竖向座标滑动, 会改变当前view的真实位置。 |
scrollBy(int x, int y) | 针对传入的X轴和Y轴进行滑动,X负值为在当前位置往左滑, 反之亦然 参数Y与X表述相同, 仅仅只会滑动view里面的内容, 不会真实改变view的位置, 一般用在viewgroup较多 |
scrollTo(int x, int y) | 针对传入的X轴和Y轴进行滑动, 滑动位置是传入参数的父布局座标, 与当前ParentView为参照物。 |