Android View坐标getLeft, getRight, getTop, getBottom

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android View坐标getLeft, getRight, getTop, getBottom相关的知识,希望对你有一定的参考价值。

1  引起疑惑

    分析视图invalidate流程的过程中发现view的left, right, top, bottom跟自己理解的不一样,现在想分析一下这几个值具体的含义。

技术分享

   

2  理解坐标,位置概念

      这里涉及坐标系的概念:

坐标系在二维视图中通过X轴和Y轴两个数字为组合表示某个点的绝对坐标。 例如(30, 100) 通常表示X轴30, Y轴100交叉的一个点

    在android中可以把left相当于X轴值, top相当于Y轴值, 通过这两个值Android系统可以知道视图的绘制起点,在通过Wdith 和 Height 可以得到视图上下左右具体值,就可以在屏幕上绝对位置绘制视图。right 与 bottom计算如下:

    right = left + width;

    bottom = top + height;

 

3 相应API

视图左侧位置  view.getLeft()

视图右侧位置 view.getRight()

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

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

视图宽度 view.getWidth();

视图高度 view.getHeight()

 

4  实例分析

技术分享

 

按照我的理解:

蓝色区域位置 left = 0,   top = 0         坐标(0, 0 )

黄色区域位置 left = 60, top = 115    坐标(60, 115) 

绿色区域位置 left = 115, top = 170  坐标(115, 170)   

技术分享 绿色区域,这里理解错误,我认为绿色区域的位置是针对于蓝色区域的(0, 0)坐标的值,从上图的右下角打印出的坐标值就可以看出与下方我列出的值不一致,看看下面的图就明白了

 

 

技术分享

 

 

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

以上是关于Android View坐标getLeft, getRight, getTop, getBottom的主要内容,如果未能解决你的问题,请参考以下文章

Android 自定义View 基础

View.getLeft() 与 View.getScrollX() 之间的 Android 区别

Android自定义View学习一---基础

android 关于为什么在onCreate里调用view.getChildAt.getLeft() 没有值!

图解Android View的scrollTo(),scrollBy(),getScrollX(), getScrollY()

图解Android View的scrollTo(),scrollBy(),getScrollX(), getScrollY()