public class DragView extends View {
private int lastX;
private int lastY;
public DragView(Context context) {
super(context);
ininView();
}
public DragView(Context context, AttributeSet attrs) {
super(context, attrs);
ininView();
}
public DragView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
ininView();
}
private void ininView() {
// 给View设置背景颜色,便于观察
setBackgroundColor(Color.BLUE);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// 记录触摸点坐标
lastX = x;
lastY = y;
break;
case MotionEvent.ACTION_MOVE:
// 计算偏移量
int offSetX = x - lastX;
int offSetY = y - lastY;
// 在当前坐标增加偏移量
layout(getLeft() + offSetX,
getTop() + offSetY,
getRight() + offSetX,
getBottom() + offSetY);
break;
}
return true;
}
}
代码如上,问题:移动 view 的时候为什么会有偏移量?
我的理解: 既然 getX() 和 getY() 获取的是相对于 view 自己左上角的坐标,如果我手指放在 view 的中间拖动 view,不管 view 的位置在哪里 getX() 和 getY() 获取的值是不变的,那么偏移量应该是0才对