关于view跟随手指移动,用getX()与getY()、getRawX()与getRawY()的差别
首先: getX getY是 触摸点距离所触摸控件左上角的距离(并非父容器,而是所触摸的控件)
getRawX getRawY是相对屏幕左上角的
private int lastX;
private int lastY;
利用getX getY方式
textView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, 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;
// 在当前left、top、right、bottom的基础上加上偏移量
textView.layout(textView.getLeft() + offsetX,
textView.getTop() + offsetY,
textView.getRight() + offsetX,
textView.getBottom() + offsetY);
break;
}
return true;
}
});
利用getRawX getRawY方式
textView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int rawX = (int) event.getRawX();
int rawY = (int) event.getRawY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// 记录触摸点坐标
lastX = rawX;
lastY = rawY;
break;
case MotionEvent.ACTION_MOVE:
// 计算偏移量
int offsetX = rawX - lastX;
int offsetY = rawY - lastY;
// 在当前left、top、right、bottom的基础上加上偏移量
textView.layout(textView.getLeft() + offsetX,
textView.getTop() + offsetY,
textView.getRight() + offsetX,
textView.getBottom() + offsetY);
// 重新设置初始坐标
lastX = rawX;
lastY = rawY;
break;
}
return true;
}
});
主要就是move事件有没有重新设置初始坐标的区别