Android 实现可拖动的ImageView
代码实现:
public class DraggableImageView extends AppCompatImageView {
private float lastTouchX;
private float lastTouchY;
public DraggableImageView(Context context) {
super(context);
init();
}
public DraggableImageView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public DraggableImageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
setClickable(true);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
final int action = event.getActionMasked();
switch (action) {
case MotionEvent.ACTION_DOWN:
lastTouchX = event.getRawX();
lastTouchY = event.getRawY();
break;
case MotionEvent.ACTION_MOVE:
float x = event.getRawX();
float y = event.getRawY();
x = Math.max(0,x);
y = Math.max(0,y);
float dx = x - lastTouchX;
float dy = y - lastTouchY;
//边界控制
ViewGroup pa = (ViewGroup) getParent();
float lx = Math.max(0,dx+getX());
float ly = Math.max(0,dy+getY());
lx = Math.min(lx,pa.getWidth()-getWidth());
ly = Math.min(ly,pa.getHeight()-getHeight());
setX(lx);
setY(ly);
lastTouchX = x;
lastTouchY = y;
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
break;
case MotionEvent.ACTION_POINTER_UP:
lastTouchX = event.getRawX();
lastTouchY = event.getRawX();
break;
}
return true;
}
}