因为项目中有需要实现控件可任意拖拽的需求,所以简单写了个自定义OnTouchListener,以作抛砖引玉,欢迎大家提议反馈。
完整实现类如下,代码中有详细注释: 用户可以决定是否开启自动拖拽边缘功能,可以监听控件的拖拽和点击事件
public class OnDragTouchListener implements View.OnTouchListener {
private int mScreenWidth, mScreenHeight;//屏幕宽高
private float mOriginalX, mOriginalY;//手指按下时的初始位置
private float mDistanceX, mDistanceY;//记录手指与view的左上角的距离
private int left, top, right, bottom;
private OnDraggableClickListener mListener;
private boolean hasAutoPullToBorder;//标记是否开启自动拉到边缘功能
public OnDragTouchListener() {
}
public OnDragTouchListener(boolean isAutoPullToBorder) {
hasAutoPullToBorder = isAutoPullToBorder;
}
@Override
public boolean onTouch(final View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACT