A basic implementation of SurfaceView
SurfaceView provides a dedicated drawing surface embedded inside of a view hierarchy. You can control the format of this surface and, if you like, its size; the SurfaceView takes care of placing the surface at the correct location on the screen.
Access to the underlying surface is provided via the SurfaceHolder interface, which can be retrieved by calling getHolder().
Access to the underlying surface is provided via the SurfaceHolder interface, which can be retrieved by calling getHolder().
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
| package com.TestSurefaceView; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; 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 ; public MySurfaceView(Context context) { super (context); // TODO Auto-generated constructor stub surfaceHolder = getHolder(); } 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 surfaceHolder.unlockCanvasAndPost(canvas); } } } } }
akm www.cdacians.com |
No comments:
Post a Comment