Cdacians

Cdacians
Cdacians

Tuesday, 7 August 2012

A basic implementation of SurfaceView


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().

?
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