實例 相關閱讀 瞭解SurfaceView ...
實例
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(); } } }