##.View显示坐标系
Android的显示坐标体系与大多数显示系统一样,以左上角为原点,右方为x轴正方向,下方为y轴正方向。
屏幕的坐标系以屏幕的左上角为原点,而在一个View内部的坐标系以该View的走上角为原点。
##.获取View左上角在屏幕上的坐标
//传入一个长度为2的数组,在方法内处理后,数组会获取到对应x、y坐标
public void getLocationOnScreen(@Size(2) int[] outLocation)
##.在父View坐标系中,获取子View各个边界的原始坐标:
getLeft()
getRight() //注意是相对父容器原点的距离,不是相对于父容器右边界的边距
getTop()
getBottom() //注意是相对父容器原点的距离,不是相对于父容器下边界的边距
以上其实就是获取了布局时的各个边界位置的值left、right、top、bottom。但要注意,这里获取的是原始位置,因为有些情况下,例如属性动画中,View的位置会改变,但原始位置的值不会变化,所以获取View左上角此刻的位置还是用getX()、getY()比较好,下面会说到。
##.Android3.0之后View中新增了x、y和translationX、translationY几个变量,可用于实现属性动画中的滑动效果。
属性动画滑动过程中,View的位置在变化。
x、y是View左上角此刻在父View坐标系中的坐标值,获取的api:
getX();
getY();
translationX、translationY是本次滑动过程中View在x轴、y轴的偏移量,获取的API:
getTranslationX();
getTranslationY();
注意:在上面View的滑动过程中,left、right、top、bottom四个值不会变化,即初始位置信息不变;但x、y和translationX、translationY会随着滑动而变化。因此,View左上角在某一时刻的位置坐标:
x = left + translationX
y = top + translationY
即属性动画并不会改变View的原始位置信息left、right、top、bottom的值,它改变的是translationX、translationY;改变layoutParams才能改变left、right、top、bottom等原始位置信息的值。
主要参考:《Android开发艺术探索》第3章