真高不明白 图像预览的例子 竟然放在这里,我觉得放在照相机那里边更好一些,这个例子很简单,就是先要获得图像预览的持有者 SurfaceHolder,然后相机通过它得到一个浏览的窗口。但是最主要 也是为啥把这个例子放在这 就是因为SurfaceHolder必须添加一个监听器实现几个接口:

class Preview extends SurfaceView implements SurfaceHolder.Callback { 

 SurfaceHolder mHolder; 

 Camera mCamera; 


 Preview(Context context) { 

 super(context); 


 // Install a SurfaceHolder.Callback so we get notified when the 

 // underlying surface is created and destroyed. 

 mHolder = getHolder(); 

 mHolder.addCallback(this); 

 mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

 } 


 public void surfaceCreated(SurfaceHolder holder) { 

 // The Surface has been created, acquire the camera and tell it where 

 // to draw. 

 mCamera = Camera.open(); 

 try { 

 mCamera.setPreviewDisplay(holder); 

 } catch (IOException exception) { 

 mCamera.release(); 

 mCamera = null; 

 // TODO: add more exception handling logic here 

 } 

 } 


 public void surfaceDestroyed(SurfaceHolder holder) { 

 // Surface will be destroyed when we return, so stop the preview. 

 // Because the CameraDevice object is not a shared resource, it's very 

 // important to release it when the activity is paused. 

 mCamera.stopPreview(); 

 mCamera.release(); 

 mCamera = null; 

 } 


 public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 

 // Now that the size is known, set up the camera parameters and begin 

 // the preview. 

 Camera.Parameters parameters = mCamera.getParameters(); 

 parameters.setPreviewSize(w, h); 

 mCamera.setParameters(parameters); 

 mCamera.startPreview(); 

 } 


} 


public class CameraPreview extends Activity { 

 private Preview mPreview; 


 @Override 

 protected void onCreate(Bundle savedInstanceState) { 

 super.onCreate(savedInstanceState); 


 // Hide the window title. 

 requestWindowFeature(Window.FEATURE_NO_TITLE); 


 // Create our Preview view and set it as the content of our activity. 

 mPreview = new Preview(this); 

 setContentView(mPreview); 

 } 


}



这里面用到最多的就是相机的设置了不说了。