Android坐标和mScrollX/Y的含义

来源:互联网 发布:淘宝的医疗器械标签 编辑:程序博客网 时间:2024/05/14 12:20

首先说一下Android坐标:
坐标的原点在屏幕的左上角(0,0),水平向右为正X,竖直向下为正Y
view和MotionEvent(触摸事件)中获取的位置关系图如下:
图中 那个深蓝色的点代表的是:手指触摸点
这里写图片描述
涉及到的方法一共有下面几个:

view获取自身坐标:getLeft(),getTop(),getRight(),getBottom()

view获取自身宽高:getHeight(),getWidth()

motionEvent获取坐标:getX(),getY(),getRawX(),getRawY()
备注:view获取位置方法里面没有getX()和getY()
view自身宽高:view控件的大小,其余的都是矢量坐标,只是有的是相对于父容器,有的是相对于屏幕边缘(这种的我们称之为绝对坐标)
关于上图的详细解释参考:
http://blog.csdn.net/jason0539/article/details/42743531

http://blog.csdn.net/yanbober/article/details/50419117
从图中我们可以理解:view内容其实也占用了view的内部空间,有时候会占满,有时候不会。比如ImageView显示图片时内容就占满ImageView,Button显示文字的时候,文字就是BUtton的内容,但是没有占满Button

mScrollX/Y的含义

mScrollX一般出现在动画设计里,mScrollX含义是:view内容左上顶点指向view左上角的矢量(可正,可负)这就好比是有一个橡皮筋,一边连接view左上点,一边连接view内容的左上点,橡皮筋有收缩力,那么这个力指向谁呢?我们知道view一旦布局完成,其位置参数一般不会变动,也就是说view整体的位置相对于父容器不会改变,因为如果这样的话会影响父容器中其他view布局的改变(我估计设计view布局体系的时候考虑过,子view的控制权大还是父view的控制权大,view内容也相当于view里面的子view,显然以父view为控制点会减少整个view体系因为某一处变化而重绘这一过程带来的系统开销,举个例子:如果在整个view体系中,嵌套最深的那个view在父容器中发生移动,如果以子view为控制点这一思想的话,那么父容器相对于这个view的位置就变化了,父容器一旦改变布局,那么父容器的父容器也就会改变,一直延伸到顶层容器,这样的开销很大;而执行以父容器为控制点这一思想,我们只需处理子view在父容器中的位置即可,)以父容器为控制点的根据还有:Android中view体系的设计就是父容器管理子容器,父容器管理子view,父容器分发事件

结论

以父容器为控制点,mScrollX就是view内容指向view左上角的矢量(坐标系还是以右下为正)。所以将view内容向右滑动,mScrollX为负值。view内容向下移动,mScrollX为负值

2 0
原创粉丝点击