Android 屏幕坐标/视图坐标/布局坐标三者间的关系

  1. 屏幕坐标:以屏幕左上方为(0,0)的坐标体系,X/Y轴的最大值即为物理屏幕分辨率的宽和高;
    触摸消息中MotionEvent.getX/getY取到的就是屏幕坐标值;
  2. 视图坐标:视图坐标是完全由视图内容的宽高决定的坐标体系,理论上他是没有边界的,不受物理屏幕大小限制;
    比如1000行的文本限定宽度为100px,每行高度为5px,那对应的X/Y最大坐标值为(100,5000);
  3. 布局坐标:子视图相对于父视图而言的相对屏幕坐标,以父视图的左上角为(0,0),而不关心父视图到底位于屏幕何处,X/Y最大坐标值为父视图的width/height;对于子视图而言,若内容过多,超过父视图分配的区域大小将由部分内容不能显示,此时就会出现滚动条,视图坐标=布局坐标+mScrollX/mScrollY;
    View体系下的getX/getY/getTop/getBottom/getLeft/getRight都是指的布局坐标;
    子视图的屏幕坐标=子视图的布局坐标+父视图的屏幕坐标;对于视图坐标和布局坐标两者之间可以进行转换,具体可以参见下图的事例,注意:空白区域不计尺寸,只是为了更明确的演示而已
    Android 屏幕坐标/视图坐标/布局坐标三者间的关系_第1张图片

你可能感兴趣的:(android)