Android 自定义View中坐标点的理解学习(一)

本文主要是记录学习自定义view中看到的资料,为了方便记忆做了保存整理便于自己学习也方便其他Android开发爱好者学习,参考资料看底部链接。

一、getLocationInWindow和getLocationOnScreen的区别

一个控件在其父窗口中的坐标位置

View.getLocationInWindow(int[] location)

一个控件在其整个屏幕上的坐标位置

View.getLocationOnScreen(int[] location)

1.getLocationInWindow是以B为原点的C的坐标

// location [0]--->x坐标,location [1]--->y坐标
int[] location = new  int[2] ;

// 获取在当前窗口内的绝对坐标,getLeft , getTop, getBottom, getRight,  这一组是获取相对在它父窗口里的坐标
view.getLocationInWindow(location); 

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

如果在Activity的OnCreate()事件输出那些参数,是全为0,要等UI控件都加载完了才能获取到这些。
在onWindowFocusChanged(boolean hasFocus)中获取为好。

注意:View.getLocationInWindow()和 View.getLocationOnScreen()在window占据全部screen时,返回值相同,不同的典型情况是在Dialog中时。当Dialog出现在屏幕中间时,View.getLocationOnScreen()取得的值要比View.getLocationInWindow()取得的值要大。

二、Android View坐标getLeft, getRight, getTop, getBottome

在Android坐标系中,以屏幕左上角作为原点,这个原点向右是X轴的正轴,向下是Y轴正轴。如下所示:

 Android坐标系中,以屏幕左上角作为原点,这个原点向右是X轴的正轴,向下是Y轴正轴。如下所示:

除了Android坐标系,还存在View坐标系,View坐标系内部关系如图所示。

1.View获取自身高度

由上图可算出View的高度:

  • width = getRight() - getLeft();
  • height = getBottom() - getTop();

View的源码当中提供了getWidth()和getHeight()方法用来获取View的宽度和高度,其内部方法和上文所示是相同的,我们可以直接调用来获取View得宽高。

2.View自身的坐标

通过如下方法可以获取View到其父控件的距离。

  • getTop();获取View到其父布局顶边的距离。
  • getLeft();获取View到其父布局左边的距离。
  • getBottom();获取View到其父布局顶边的距离。
  • getRight();获取View到其父布局左边的距离。

3.相应API汇总及坐标学习理解

视图左侧位置  view.getLeft()

视图右侧位置 view.getRight()

视图顶部位置 view.getTop();

视图底部位置 view.getBottom();

视图宽度 view.getWidth();

视图高度 view.getHeight()

总结: 视图的left , top , right , bottom 的值是针对其父视图的相对位置, 绿色区域是针对其父视图(即黄色区域为(0, 0)点)的坐标,不应该是(115, 170 ) 而是 (55, 55)
 
参考:

1.https://www.jianshu.com/p/705a6cb6bfee

2.Android View坐标getLeft, getRight, getTop, getBottom - zhengbeibei - 博客园

3.Android坐标getLeft,getRight,getTop,getBottom,getLocationInWindow和getLocationOnScreen_星空物语_新浪博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值