一、getRawX、getRawY与getX、getY的区别 在编写android的自定义控件,或者判断用户手势操作时,往往需要使用MotionEvent中的getRawX()、getRawY()与getX()、getY()取得触摸点在X轴与Y轴上的距离,这四个方法都返回一个float类型的参数,单位为像素(Pixel)。 getRawX()、getRawY()返回的是触摸点相对于屏幕的位置,而getX()、getY()返回的则是触摸点相对于View的位置。 以下两张图直观的表现了这几个方法的差异,在屏幕中央放置了一个Button,图中绿圆点为触摸点位置。
二、View中的getTop,getLeft区别
getTop: 按钮左上角相对于父view(LinerLayout或其它layout)的y坐标 getLeft: 按钮左上角相对于父view(LinerLayout或其它layout)的x坐标
我们还是用一张直观图来描述吧:
最后贴上通过反射拿到状态栏的高度代码:
private int getStatusBarHeight() {
if (mStatusBarHeight ==
0) {
try {
Class<?> c = Class.forName(
"com.android.internal.R$dimen");
Object o = c.newInstance();
Field field = c.getField(
"status_bar_height");
int x = (Integer) field.
get(o);
mStatusBarHeight = getResources().getDimensionPixelSize(x);
}
catch (Exception e) {
e.printStackTrace();
}
}
return mStatusBarHeight;
}