Surfaceview with camera in android.

Add Surfaceview in xml.

<SurfaceView    
android:id="@+id/surfaceView" 
   android:layout_width="fill_parent"   
 android:layout_height="fill_parent"    />




public class Home extends BaseActivity implements SurfaceHolder.Callback{
Camera camera;
SurfaceView surfaceView;
SurfaceHolder surfaceHolder;
PictureCallback jpegCallback;

protected void onCreate(Bundle savedInstanceState) {
surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
target = (Button) findViewById(R.id.target);
target1 = (Button) findViewById(R.id.target1);
surfaceHolder = surfaceView.getHolder();

surfaceHolder.addCallback(this);

// deprecated setting, but required on Android versions prior to 3.0surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

jpegCallback = new PictureCallback() {
    public void onPictureTaken(byte[] data, Camera camera) {
        FileOutputStream outStream = null;
        try {
            outStream = new FileOutputStream(String.format("/sdcard/%d.jpg", System.currentTimeMillis()));
            outStream.write(data);
            outStream.close();
            Log.d("Log", "onPictureTaken - wrote bytes: " + data.length);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
        }
        //Toast.makeText(getApplicationContext(), "Picture Saved", Toast.LENGTH_LONG).show();       
 refreshCamera();
    }
};


}


 public void refreshCamera() {
        if (surfaceHolder.getSurface() == null) {
            // preview surface does not exist         
   return;
        }

        // stop preview before making changes      
  try {
            camera.stopPreview();
        } catch (Exception e) {
            // ignore: tried to stop a non-existent preview        }

        // set preview size and make any resize, rotate or      
  // reformatting changes here        // start preview with new settings     
   try {
            camera=Camera.open(getFrontCameraId());
            camera.setDisplayOrientation(90);
            camera.setPreviewDisplay(surfaceHolder);
            camera.startPreview();


        } catch (Exception e) {

        }
    }
    private int getFrontCameraId(){
        int camId = -1;
        int numberOfCameras = Camera.getNumberOfCameras();
        Camera.CameraInfo ci = new Camera.CameraInfo();

        for(int i = 0;i < numberOfCameras;i++){
            Camera.getCameraInfo(i,ci);
            if(ci.facing == Camera.CameraInfo.CAMERA_FACING_FRONT){
                camId = i;
            }
        }

        return camId;
    }
    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.startPreview();
    }

    public void surfaceCreated(SurfaceHolder holder) {
        try {
            // open the camera          
  camera=Camera.open(getFrontCameraId());

        } catch (RuntimeException e) {
            // check for exceptions       
     System.err.println(e);
            return;
        }
//        Camera.Parameters param;//      
  param = camera.getParameters();////     
   // modify parameter//   
     param.setPreviewSize(352, 500);//   
     camera.setParameters(param);


        Camera.Parameters mParameters = camera.getParameters();
        Camera.Size bestSize = null;

        List<Camera.Size> sizeList = camera.getParameters().getSupportedPreviewSizes();
        bestSize = sizeList.get(0);

        for(int i = 1; i < sizeList.size(); i++){
            if((sizeList.get(i).width * sizeList.get(i).height) > (bestSize.width * bestSize.height)){
             //   bestSize = sizeList.get(i);            }
        }

        mParameters.setPreviewSize(bestSize.width, bestSize.height);
        camera.setParameters(mParameters);

        try {
            // The Surface has been created, now tell the camera where to draw    
        // the preview.         
   camera.setPreviewDisplay(surfaceHolder);
            camera.setDisplayOrientation(90);
            camera.startPreview();

        } catch (Exception e) {
            // check for exceptions            System.err.println(e);
            return;
        }
    }

    public void surfaceDestroyed(SurfaceHolder holder) {
        // stop preview and release camera        camera.stopPreview();
        camera.release();
        camera = null;
    }






}






Popular posts from this blog

Simple Sign up design. Android.

Cart page design in android.

Set Date on jDateChooser and retrieve record from database.