1、View和ViewGroup关系
View是Android所有控件的基类,常用的TextView和ImageView是继承自VIew。
ViewGroup是View的组合,它可以包含很多View以及ViewGroup,而包含的ViewGroup又可以包含View和ViewGroup,以此类推,行程一个View树。我们常用的LinearLayout就是一个ViewGroup。ViewGroup也继承自View。
ViewGroup的组织结构图
继承关系
2、坐标系
这里优先提到坐标系,是因为坐标系数据额外知识,但是对于画自定义的View的位置却十分的重要。Android系统又两种坐标系,分别为Android坐标系和View坐标系。如果你连这个View的位置都不知道,怎么去操作View 呢?
2.1、Android坐标系
在Android中,将屏幕左上角的顶点作为坐标原点,原点向右侧是X轴的正防线,向下是Y轴的正方向。使用getRawX()和getRawY()方法获取到坐标值。
Android坐标系
2.2、View坐标系
1、View和ViewGroup关系
View是Android所有控件的基类,常用的TextView和ImageView是继承自VIew。
ViewGroup是View的组合,它可以包含很多View以及ViewGroup,而包含的ViewGroup又可以包含View和ViewGroup,以此类推,行程一个View树。我们常用的LinearLayout就是一个ViewGroup。ViewGroup也继承自View。
1. View获取自身的高和宽
View的宽高系统给的方法是getHeight和getWidth,查看源码就会知道是怎么算出来的了,如下:
//右侧边到父的左侧距离 - 左侧边到父的左侧距离
width=getRight()-getLeft();
//下边到父的顶部距离 - 上边到父的顶部距离
height=getBottom()-getTop();
2.View的自身坐标
通过如下方法可以获得View到其父控件(ViewGroup) 的距离。
- getTop () :获取View自身顶边到其父布局顶边的距离。
- getLeft():获取View自身左边到其父布局左边的距离。
- getRight () :获取View自身右边到其父布局左边的距离。
- getBottom () :获取View自身底边到其父布局项边的距离。
3.触摸点
中间的那个圆点就是我们的触摸的点,自定义View伴随的点击时间、滑动时间都是根据你的触摸点来作为起点的。
无论View还是ViewGroup,最总的点击时间都会onTouchEvent(MotionEvent event)方法来处理,比如当前View在onInterceptTouchEvent中拦截,也不洗由当前View的onTouchEvent来处理你所拦截的事件。
MotionEvent也提供了获取焦点坐标的各种方法:
- getX():获取点击事件距离控件左边的距离,即视图坐标。
- getY () :获取点击事件距离控件顶边的距离,即视图坐标。
- getRawX():获取点击事件距离整个屏幕左边的距离,即绝对坐标。
- getRawY():获取点击事件距离整个屏幕项边的距离,即绝对坐标。