public class DragSurfaceView extends SurfaceView implements SurfaceHolder.Callback,Runnable{ private int screenW; //屏幕宽度 private int screenH; //屏幕高度 private float cx = 100; //默认X坐标 private float cy = 100; //默认Y坐标 private Bitmap mBitmap; private SurfaceHolder mSurfaceHolder = null; private Thread thread = null; public DragSurfaceView(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,int resId){ return BitmapFactory.decodeResource(context.getResources(),resId); } protected void myDraw() { //获取canvas实例 Canvas canvas = mSurfaceHolder.lockCanvas(); //将屏幕设置为白色 canvas.drawColor(Color.WHITE); //绘制图片和位置 canvas.drawBitmap(mBitmap,cx,cy,null); //将画好的画布提交 mSurfaceHolder.unlockCanvasAndPost(canvas); } @Override public void run() { while(true){ try{ myDraw(); Thread.sleep(100); }catch(InterruptedException e){ e.printStackTrace(); } } } @SuppressLint("ClickableViewAccessibility") @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: // 按下 cx = (int) event.getX(); cy = (int) event.getY(); break; case MotionEvent.ACTION_MOVE: // 移动 cx = (int) event.getX(); cy = (int) event.getY(); break; case MotionEvent.ACTION_UP: // 抬起 cx = (int) event.getX(); cy = (int) event.getY(); break; } return true; } //surface创建的时候调用 @Override public void surfaceCreated(SurfaceHolder surfaceHolder) { //获取屏幕高度 screenW = getWidth(); screenH = getHeight(); thread.start(); } //surface被改变的时候调用 @Override public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) { } //surface销毁的时候调用 @Override public void surfaceDestroyed(SurfaceHolder surfaceHolder) { doRecycledIfNot(mBitmap); } //回收一个未被回收的Bitmap public static void doRecycledIfNot(Bitmap bitmap) { if (!bitmap.isRecycled()) { bitmap.recycle(); } } }