Android中getLocationOnScreen和getLocationInWindow
16lz
2021-01-26
int[] location = new int[2] ;其中 location[0]代表x坐标,location [1] 代表 坐标。
view.getLocationInWindow(location);//获取在整个屏幕内的绝对坐标,注意这个值是要从屏幕顶端算起,也就是包括了通知栏的高度。
view.getLocationOnScreen(location);
所以在需要确定组件在父窗体中的坐标时,使用 getLocationInWindow ,需要获得组件在整个屏幕的坐标时,使用 getLocationOnScreen。 这里要注意虽然getLocationOnScreen是获取组件在屏幕中的坐标,但如果我们想拿到这个坐标,并且在这个坐标附近再添加一个组件时,直接使用拿到的坐标来建立新的组件是达不到效果的。
在代码中,我想根据itemVIew的坐标来绘制一个新的ImageView控件,但如果整个界面没有父容器时,拿到的坐标是可以直接使用的,而当前界面上有父容器,或者有与其平行的界面时,坐标是有偏移的,所以我加上了有些判断处理,根据不同的布局,适当的调整下坐标的偏移量
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);
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);
}
更多相关文章
- android定位和地图开发实例
- Android之屏幕方向改变以及onConfigurationChanged事件
- CommonsWare Android(安卓)Components
- 分析各种Android设备屏幕分辨率与适配 - 使用大量真实安卓设备采
- android屏幕页面实现滚动,页面跳转
- 一步一步学android之布局管理器——RelativeLayout
- Android(安卓)startService 启动自动解锁点亮屏幕
- android加载gif图片的动画库
- Android(安卓)截取手机屏幕两种实现方法