实例

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

05-11 11:31