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