先上效果图,view是我自己通过继承View类随便画的.
关键代码,在view中重写onTouchEvent方法:
/**
* 让view能够随手自由拖动
* @param event
* @return
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
super.onTouchEvent(event);
int x = (int) event.getRawX(); //触摸点相对于屏幕的横坐标
int y = (int) event.getRawY(); //触摸点相对于屏幕的纵坐标
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE: //当手势类型为移动时
int deltaX = x - mLastX; //两次移动的x距离差
int deltaY = y - mLastY;//两次移动的y的距离差
//重新设置此view相对父容器的偏移量
int translationX = (int) getTranslationX() + deltaX;
int translationY = (int) getTranslationY() + deltaY;
setTranslationX(translationX);
setTranslationY(translationY);
break;
case MotionEvent.ACTION_UP:
break;
default:break;
}
//记录上一次移动的坐标
mLastX = x;
mLastY = y;
return true;
}
其中的mLastX,mLastY在属性中定义
(end~)