我们先看下Android中的坐标系:分为两种,第一种是Android坐标系,第二种是View坐标系。
先看第一种坐标系,Android坐标系。它是将屏幕左上角的顶点作为Android坐标系的原点,这个原点向右是X轴正方向,向下是Y轴正方向。
getRawX()个getRawY()方法获得的 坐标也是Android坐标系的坐标。
第二种坐标系是View坐标系,与第一种坐标系是共同存在的。
中间的实心矩形,我们当做是触摸点。
getRawX()获得的是点击事件距离整个屏幕左边的距离,也叫作绝对坐标;
getRawY()获得是点击事件距离整个屏幕距离整个屏幕定边的距离,也就是绝对坐标;
getX(): 获取点击事件距离控件左边的距离,也就是视图坐标;
getY():获取点击事件距离控件顶部的距离,也就是视图坐标;
getTop():获取View自身顶边到其父控件顶边的距离。
getLeft():获取View自身左边到其父布局左边的距离。
getRight():获取View自身右边到其父布局左边的距离。
getBottom():获取View自身底边到其父布局顶边的距离。
另外介绍两个方法: getWidth()和getHeight()方法;分别是获取View的宽和高度。其实这个方法内部也就是坐标点之间的距离。
View的滑动:当点击事件传到View时,系统记下触摸点的坐标,手指一动后记录下移动后的触摸点的坐标并算出偏移量,通过偏移量来修改View的坐标。另外实现View滑动的方法有很多,今天我们先说一下layout();
我们知道View的绘制过程中,会调用layout(),而layout()方法内部会调用onLayout()方法来显示位置。所以我们只要修改了View的top,bottom,right,left属性就可以控制View的坐标。
我们看下View的onTouchEvent
首先我们获取了手指触摸点的横坐标和纵坐标。在手指按下的时候赋值;当触摸移动的时候记录移动的偏移量,调用layout方法重新摆放位置。
直接在布局中可以使用这个自定义的View,运行之后我们在手机屏幕上可以拖动此view到任何的位置。
PS: 这里最好是做一下限制,将View距离父控件左边的位置大于等于0;而距离父控件顶部也是大于等于0;距离父控件左边小于等于屏幕宽度;距离父控件顶部小于等于屏幕的高度;不然这个view可以滑动到屏幕外,就不是我们想要看到的效果了。