上图:
代码:
public class MyTouchView extends View{
private Bitmap mBitmap;
private int mStartX,mStartY;
private int mLeft,mTop,mRight,mBottom;
private int mBitWidth,mBitHeight;
private boolean isTouch = false;
public MyTouchView(Context context) {
super(context);
init();
}
public MyTouchView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init();
}
private void init(){
mBitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.girl);
mBitWidth = mBitmap.getWidth();
mBitHeight = mBitmap.getHeight();
mLeft = 0;
mRight = 0;
mRight = mBitWidth;
mBottom = mBitHeight;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(mBitmap,mLeft,mTop,null);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
mStartX = (int) event.getRawX();
mStartY = (int) event.getRawY();
isTouch = isTouch(mStartX,mStartY);
break;
case MotionEvent.ACTION_MOVE:
if (isTouch) {
//计算出需要移动的距离
int dx = (int) event.getRawX() - mStartX;
int dy = (int) event.getRawY() - mStartY;
mLeft = mLeft + dx;
mTop = mTop + dy;
mRight = mLeft + mBitWidth;
mBottom = mTop + mBitHeight;
invalidate();
//记录最后一次移动的位置
mStartX = (int) event.getRawX();
mStartY = (int) event.getRawY();
}
break;
}
return true;
}
private boolean isTouch(int touchX,int touchY){
Rect rect = new Rect(mLeft, mTop,mRight,mBottom);
return rect.contains(touchX,touchY);
}
}