Android中getLocationOnScreen和getLocationInWindow

来源:互联网 发布:淘宝哪家洗照片质量好 编辑:程序博客网 时间:2024/04/28 03:43
int[] location = new  int[2] ;

view.getLocationInWindow(location); //获取在整个屏幕内的绝对坐标,注意这个值是要从屏幕顶端算起,也就是包括了通知栏的高度。
view.getLocationOnScreen(location);

其中 location[0]代表x坐标,location [1] 代表 坐标。

所以在需要确定组件在父窗体中的坐标时,使用getLocationInWindow,需要获得组件在整个屏幕的坐标时,使用getLocationOnScreen。
这里要注意虽然getLocationOnScreen是获取组件在屏幕中的坐标,但如果我们想拿到这个坐标,并且在这个坐标附近再添加一个组件时,直接使用拿到的坐标来建立新的组件是达不到效果的。

View itemView = userManagerView.getListView().getChildAt(j);// 获取列表子项
int[] location = new int[2];
itemView.getLocationOnScreen(location);
ImageView image = new ImageView(getContext());

image.setBackgroundResource(R.drawable.operator);
if (GlobalData.loginState()) {
params = new AbsoluteLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT, location[0]-15, location[1] - 95);
} else {
params = new AbsoluteLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT, location[0]-15, location[1] - 25);
}
image.setLayoutParams(params);
在代码中,我想根据itemVIew的坐标来绘制一个新的ImageView控件,但如果整个界面没有父容器时,拿到的坐标是可以直接使用的,而当前界面上有父容器,或者有与其平行的界面时,坐标是有偏移的,所以我加上了有些判断处理,根据不同的布局,适当的调整下坐标的偏移量

if (GlobalData.loginState()) {
params = new AbsoluteLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT, location[0]-15, location[1] - 95);
} else {
params = new AbsoluteLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT, location[0]-15, location[1] - 25);
}

0 0
原创粉丝点击