在Android 中,存在两种坐标系,一个是Android 坐标系,一个是View坐标系。
1、对于Android 坐标系,一般屏幕左上角为坐标原点,从原点向右为X轴正方向,原点向下为Y轴正方向
在自定义View或者触摸事件MotionEvent当中的getRawX()和getRawY()方法获取到的就是Android 坐标系X轴和Y轴的距离,也称为绝对坐标。
2、而对于View来说,有分别获取距离父ViewGroup上下左右的方法,
getTop()(View的顶边和父ViewGroup的顶边的距离)、
getBottom()(View底部到父ViewGroup的底部距离)、
getLeft()(View左边到父ViewGroup左边的距离)、
getRight()(View右边到父ViewGroup右边的距离),
那么根据这四个值的定义就可以获取到View的宽(getRight()-getLeft())高(getBottom()-getTop())。View自身有获取宽高的方法,getWidth()和getHeight(),进入到源码中查看,其实也是使用的getRight()-getLeft()和getBottom()-getTop()
3、在Android中有一个触摸事件onTouchEvent(MotionEvent event)
里面有两个方法getX()和getY(),这两个方法就是相对坐标(View自身(触摸点)的边线和父ViewGroup边线的距离),要和绝对坐标有所区分。下图中的原点表示触摸位置。
而根据MotionEvent的不同,就可以获取到不同手势(以滑动,MotionEvent.ACTION_MOVE为例)下的不同相对坐标,就可以计算出View的滑动距离,再通过layout(int l, int t, int r, int b)方法来重新设置View的位置
其他具体的计算和操作,这里不做说明(我也是一知半解不透彻),只把坐标系写在这里记录一下。