我这里的View随着手指移动用的是系统方法,View.layout(int l, int t, int r, int b)
以ImageView为例:四个参数分别是ImageView的getLeft(),getTop(),getRight(),getBottom();
直接上关键代码:
imageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction()){
case MotionEvent.ACTION_DOWN:
downX = (int)motionEvent.getRawX();
downY = (int)motionEvent.getRawY();
break;
case MotionEvent.ACTION_MOVE:
int currentX = (int)motionEvent.getRawX();
int currentY = (int)motionEvent.getRawY();
int offx = currentX -downX;
int offy = currentY -downY;
imageView.layout(imageView.getLeft()+offx, imageView.getTop()+offy, imageView.getRight()+offx,imageView.getBottom() + offy);
downX = currentX;
downY= currentY;
break;
case MotionEvent.ACTION_UP:
break;
default:
break;
}
return true;
}
});
});
其中,event.getRawX() 获取的是点击ImageView时事件的坐标距离屏幕的X轴边缘距离;区别于event.getX(),event.getX()获取的是事件相对于ImageView本身左上角的X轴距离。 ImageView.getLeft:获取的是View自身的左边距离父布局的左边的距离。