Drawing on SurfaceView
Last post introduce "A basic implementation of SurfaceView". To draw something on the SurfaceView, place the codes in-between surfaceHolder.lockCanvas() and surfaceHolder.unlockCanvasAndPost(canvas).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
| package com.TestSurefaceView; import java.util.Random; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.os.Bundle; import android.view.SurfaceHolder; import android.view.SurfaceView; public class TestSurefaceView extends Activity { MySurfaceView mySurfaceView; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); mySurfaceView = new MySurfaceView( this ); setContentView(mySurfaceView); } @Override protected void onResume() { // TODO Auto-generated method stub super .onResume(); mySurfaceView.onResumeMySurfaceView(); } @Override protected void onPause() { // TODO Auto-generated method stub super .onPause(); mySurfaceView.onPauseMySurfaceView(); } class MySurfaceView extends SurfaceView implements Runnable{ Thread thread = null ; SurfaceHolder surfaceHolder; volatile boolean running = false ; private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); Random random; public MySurfaceView(Context context) { super (context); // TODO Auto-generated constructor stub surfaceHolder = getHolder(); random = new Random(); } public void onResumeMySurfaceView(){ running = true ; thread = new Thread( this ); thread.start(); } public void onPauseMySurfaceView(){ boolean retry = true ; running = false ; while (retry){ try { thread.join(); retry = false ; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } @Override public void run() { // TODO Auto-generated method stub while (running){ if (surfaceHolder.getSurface().isValid()){ Canvas canvas = surfaceHolder.lockCanvas(); //... actual drawing on canvas paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth( 3 ); int w = canvas.getWidth(); int h = canvas.getHeight(); int x = random.nextInt(w- 1 ); int y = random.nextInt(h- 1 ); int r = random.nextInt( 255 ); int g = random.nextInt( 255 ); int b = random.nextInt( 255 ); paint.setColor( 0xff000000 + (r << 16 ) + (g << 8 ) + b); canvas.drawPoint(x, y, paint); surfaceHolder.unlockCanvasAndPost(canvas); } } } } }
akm
www.cdacians.com
|
No comments:
Post a Comment