首先,我们都知道,拖动一个view,需要给它设置touchListener,或者重写他的touchEvent。我们以ImageView为例,自定义一个DragView,继承ImageView。
单纯的只是想让view拖动,我们只需要在ACTION_DOWN中记录初始位置,在ACTION_MOVE中记录拖动后手指移动的距离,计算出这个move操作后哦,view的四个边界坐标应该所在的位置,然后layout一遍。
case MotionEvent.ACTION_DOWN:
downX = event.getX();
downY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
//width和height为控件的宽高
final float xDistance = event.getX() - downX;
final float yDistance = event.getY() - downY;
int l,r,t,b;
l = (int) (getLeft() + xDistance);
r = l+width;
t = (int) (getTop() + yDistance);
b = t+height;
this.layout(l, t, r, b);
break;
当我们如此实现后,发现view拖动到超出边缘位置的时候,出现各种显示不正常的问题。所以,我们需要控制view的layout,不能超过父控件的边界。注意了,我们不能超出的,是父控件的边界,可是我们在这个自定义的拖动控件中,