Android View坐标系与View坐标获取

##.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章

猜你喜欢

转载自blog.csdn.net/u013914309/article/details/124594832