目录

 1、View和ViewGroup关系

2、坐标系

2.1、Android坐标系

 2.2、View坐标系

3、下一节介绍View的滑动


Android体统提供了很多控件用于展示以及和用户交互,比如TextView、Buttom、LinearLayout等。虽然它们的功能十分强大,但有时我们为了追求更便利及更好的效果扔旧需要自己去写自定义VIew。

这就需要我们对View的事件分发及View的工作流程十分熟悉。

 1、View和ViewGroup关系

View是Android所有控件的基类,常用的TextView和ImageView是继承自VIew。

ViewGroup是View的组合,它可以包含很多View以及ViewGroup,而包含的ViewGroup又可以包含View和ViewGroup,以此类推,行程一个View树。我们常用的LinearLayout就是一个ViewGroup。ViewGroup也继承自View。

Android GroupView位置改变内部View位置 安卓自定义viewgroup_自定义VIew

ViewGroup的组织结构图

Android GroupView位置改变内部View位置 安卓自定义viewgroup_Android进阶_02

继承关系

2、坐标系

这里优先提到坐标系,是因为坐标系数据额外知识,但是对于画自定义的View的位置却十分的重要。Android系统又两种坐标系,分别为Android坐标系和View坐标系。如果你连这个View的位置都不知道,怎么去操作View 呢?

2.1、Android坐标系

 在Android中,将屏幕左上角的顶点作为坐标原点,原点向右侧是X轴的正防线,向下是Y轴的正方向。使用getRawX()和getRawY()方法获取到坐标值。

Android GroupView位置改变内部View位置 安卓自定义viewgroup_自定义VIew_03

Android坐标系 

 2.2、View坐标系

Android GroupView位置改变内部View位置 安卓自定义viewgroup_控件_04

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():获取点击事件距离整个屏幕项边的距离,即绝对坐标。