public class DragSurfaceView extends SurfaceView implementsSurfaceHolder.Callback,Runnable{private int screenW; //屏幕宽度
private int screenH; //屏幕高度
private float cx = 100; //默认X坐标
private float cy = 100; //默认Y坐标
privateBitmap mBitmap;private SurfaceHolder mSurfaceHolder = null;private Thread thread = null;publicDragSurfaceView(Context context,@Nullable AttributeSet attrs) {super(context,attrs);
mSurfaceHolder=getHolder();
mSurfaceHolder.addCallback(this);
mBitmap=getBitmapResources(context,R.drawable.x1);
thread=new Thread(this);
}public static Bitmap getBitmapResources(Context context,intresId){returnBitmapFactory.decodeResource(context.getResources(),resId);
}protected voidmyDraw() {//获取canvas实例
Canvas canvas =mSurfaceHolder.lockCanvas();//将屏幕设置为白色
canvas.drawColor(Color.WHITE);//绘制图片和位置
canvas.drawBitmap(mBitmap,cx,cy,null);//将画好的画布提交
mSurfaceHolder.unlockCanvasAndPost(canvas);
}
@Overridepublic voidrun() {while(true){try{
myDraw();
Thread.sleep(100);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
@SuppressLint("ClickableViewAccessibility")
@Overridepublic booleanonTouchEvent(MotionEvent event) {switch(event.getAction()) {caseMotionEvent.ACTION_DOWN://按下
cx = (int) event.getX();
cy= (int) event.getY();break;caseMotionEvent.ACTION_MOVE://移动
cx = (int) event.getX();
cy= (int) event.getY();break;caseMotionEvent.ACTION_UP://抬起
cx = (int) event.getX();
cy= (int) event.getY();break;
}return true;
}//surface创建的时候调用
@Overridepublic voidsurfaceCreated(SurfaceHolder surfaceHolder) {//获取屏幕高度
screenW =getWidth();
screenH=getHeight();
thread.start();
}//surface被改变的时候调用
@Overridepublic void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, inti2) {
}//surface销毁的时候调用
@Overridepublic voidsurfaceDestroyed(SurfaceHolder surfaceHolder) {
doRecycledIfNot(mBitmap);
}//回收一个未被回收的Bitmap
public static voiddoRecycledIfNot(Bitmap bitmap) {if (!bitmap.isRecycled()) {
bitmap.recycle();
}
}
}