SurfaceView(8)自定义SurfaceView的简单示例
代码如下:
1 public class CustomSurfaceView extends SurfaceView implements SurfaceHolder.Callback{ 2 3 private Paint paint; 4 private Container container; 5 private Circle circle; 6 private Rect rect; 7 8 private Timer timer; 9 private TimerTask timerTask; 10 11 public void startTimer(){ 12 timer = new Timer(); 13 timerTask = new TimerTask() { 14 @Override 15 public void run() { 16 draw(); 17 } 18 }; 19 timer.schedule(timerTask, 100,100); 20 } 21 public void stopTimer(){ 22 if (timer != null) { 23 timer.cancel(); 24 } 25 } 26 public void draw(){ 27 int h = getHeight(); 28 int w = getWidth(); 29 Canvas canvas = getHolder().lockCanvas(); 30 canvas.drawColor(Color.WHITE); 31 canvas.drawRect(w/4, h/4, 200, 200, paint); 32 33 canvas.save(); 34 canvas.rotate(45,w/2,h/2); 35 canvas.drawText("text", w/2, h/2, paint); 36 canvas.restore(); 37 38 canvas.drawLine(0, 0, w, h, paint); 39 canvas.drawLine(w, 0, 0,h, paint); 40 41 42 container.draw(canvas); 43 getHolder().unlockCanvasAndPost(canvas); 44 } 45 46 public CustomSurfaceView(Context context) { 47 super(context); 48 paint = new Paint(); 49 paint.setColor(Color.RED); 50 getHolder().addCallback(this); 51 container = new Container(); 52 rect = new Rect(); 53 circle = new Circle(); 54 rect.addChildView(circle); 55 container.addChildView(rect); 56 } 57 @Override 58 public void surfaceCreated(SurfaceHolder holder) { 59 startTimer(); 60 } 61 62 //在surface的大小发生改变时激发 63 @Override 64 public void surfaceChanged(SurfaceHolder holder, int format, int width, 65 int height) { 66 } 67 68 @Override 69 public void surfaceDestroyed(SurfaceHolder holder) { 70 stopTimer(); 71 } 72 73 }