本篇开始学习自定义View的拖拽实现
先上效果图
原理
先来说明一下实现原理,这里的核心方法是View.layout(left, top, right, bottom),通过该方法我们可以实现拖拽效果。原理如下:
-
我们先获取屏幕触摸点的坐标,然后呢,需要获取控件的四个边框距离坐标原点(0,0)的距离。
-
得到这些数据后,然后我们获取移动后的触摸点的坐标,两组触摸点的坐标做差,得到移动的x值和y值。
-
最后,我们在四个边距原点的距离之上,加上触摸点差值,就可以得到移动后的控件的四个顶点的位置了。
坐标系
展示一下坐标系,借用参考文档的图片
其中view.getLeft(),view.getTop(),view.getRight(),view.getBottom().是各边距原点的距离,原点在左上角。
然后是MotionEvent中的getRawX()、getRawY()和getX()、getY()
getRawX()、getRawY():是触摸点距离原点的距离
getX()、getY():是触摸点距离控件的原点的距离(也就是触摸点到控件左上角的距离)
具体实现
按照上面说明的原理,下面是具体的代码实现
- 获取触摸点的坐标
x = (int) event.getRawX();
y = (int) event.getRawY();
- 获取移动后的坐标,并做差得到移动前后的差值
int dx = (int) (event.getRawX() - x);
int dy