surfaceview模版代碼:
基本的surfaceview都需要這樣的模版整理,模版代碼貼到下面區別就是在draw中進行不同的繪圖設計
下面的例子是繪製sin函數
package com.example.zobject.surfaceview; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.util.AttributeSet; import android.view.SurfaceHolder; import android.view.SurfaceView; /** * Created by zobject on 16/12/12. */ public class Myview extends SurfaceView implements SurfaceHolder.Callback, Runnable { //holder private SurfaceHolder surfaceHolder; //繪圖 private Canvas canvas; //子線程 private boolean myrun; private Paint mpaint; private Path mpath; private int i=0; private int j=0; public Myview(Context context) { super(context); initview(); } public Myview(Context context, AttributeSet attrs) { super(context, attrs); initview(); } public Myview(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initview(); } private void initview() { surfaceHolder = getHolder(); surfaceHolder.addCallback(this); setFocusable(true); setFocusableInTouchMode(true); mpath=new Path(); mpaint=new Paint(Paint.ANTI_ALIAS_FLAG); mpaint.setColor(Color.RED); mpaint.setStyle(Paint.Style.STROKE); mpaint.setStrokeWidth(10); mpaint.setStrokeCap(Paint.Cap.ROUND); mpaint.setStrokeJoin(Paint.Join.ROUND); } @Override public void surfaceCreated(SurfaceHolder surfaceHolder) { myrun = true; new Thread(this).start(); } @Override public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) { } @Override public void surfaceDestroyed(SurfaceHolder surfaceHolder) { myrun = false; } @Override public void run() { while (myrun) { draw(); i+=1; j=(int)(100*Math.sin(i*2*Math.PI/180)+400); mpath.lineTo(i,j); } } private void draw() { try { canvas = surfaceHolder.lockCanvas(); canvas.drawColor(Color.WHITE); canvas.drawPath(mpath, mpaint); } catch (Exception e) { } finally { if (canvas != null) { surfaceHolder.unlockCanvasAndPost(canvas); } } } }
結果截圖: