先简单的画个圆为例子
首先不能直接在布局文件写 SurfaceView;
写一个类继承SurfaceView并重写几个构造方法;
public MySurfaceView(Context context) { this(context,null); } public MySurfaceView(Context context, AttributeSet attrs) { this(context, attrs,-1); } public MySurfaceView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); }再初始化 ;
方法就是getiHolder得到SurfaceHolder对象 holderholder 有个回调监听addCallback();重写里面的三个方法;依次是创建,改变,销毁@Override public void surfaceCreated(SurfaceHolder holder) { mythread = new Mythread(holder);//重写一个内部类继承线程Thread mythread.setTrue(true);//设置参数 mythread.start();//开启线程 } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { }那个线程类代码如下(值得注意的是开始画的时候 要锁定画布,画完之后解锁画布)Canvas canvas = surfaceHolder.lockCanvas(); drawCircler(canvas);//这是画画 surfaceHolder.unlockCanvasAndPost(canvas);class Mythread extends Thread{ private boolean isTrue =false; private SurfaceHolder surfaceHolder; private int r; private void initPaint(){ paint = new Paint(); paint.setStrokeWidth(5); paint.setColor(0xffff0000); paint.setStyle(Paint.Style.STROKE); paint.setAntiAlias(true); } public void setTrue(boolean isTrue2){ isTrue=isTrue2; } public Mythread(SurfaceHolder surfaceHolder){ initPaint(); r=5; this.surfaceHolder=surfaceHolder; } @Override public void run() { while (isTrue){ synchronized (surfaceHolder){ Canvas canvas = surfaceHolder.lockCanvas(); drawCircler(canvas); surfaceHolder.unlockCanvasAndPost(canvas); } } } private void drawCircler(Canvas canvas){ r+=5; if (r>60){ r=5; } canvas.drawCircle(getWidth()/2,getHeight()/2,r,paint); }