2015-08-25 16 views

risposta

3

Sì si, Controllare questo post: https://www.airpair.com/android/android-camera-surface-view-fragment

Fondamentalmente overwritting il SurfaceView e integrando la richiamata immagine della telecamera.

/* Surface on which the camera projects it's capture results. 
*/ 
class CameraPreview extends SurfaceView implements SurfaceHolder.Callback { 
     SurfaceHolder mHolder; 
     Camera mCamera; 

     public CameraPreview(Context context, Camera camera) { 
      super(context); 
      mCamera = camera; 

      // Install a SurfaceHolder.Callback so we get notified when the 
      // underlying surface is created and destroyed. 
      mHolder = getHolder(); 
      mHolder.addCallback(this); 
      // deprecated setting, but required on Android versions prior to 3.0 
      mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
     } 

     public void surfaceCreated(SurfaceHolder holder) { 
      // The Surface has been created, now tell the camera where to draw the preview. 
      try { 
       mCamera.setPreviewDisplay(holder); 
       mCamera.startPreview(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 

     public void surfaceDestroyed(SurfaceHolder holder) { 
      // empty. Take care of releasing the Camera preview in your activity. 
     } 

     public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 
      // If your preview can change or rotate, take care of those events here. 
      // Make sure to stop the preview before resizing or reformatting it. 

      if (mHolder.getSurface() == null){ 
       // preview surface does not exist 
       return; 
      } 

      // stop preview before making changes 
      try { 
       mCamera.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 { 
       mCamera.setPreviewDisplay(mHolder); 
       mCamera.startPreview(); 

      } catch (Exception e){ 
       e.printStackTrace(); 
      } 
     } 
    } 

con una foto di richiamata macchina fotografica come:

private Camera.PictureCallback mPicture = new Camera.PictureCallback() { 

     @Override 
     public void onPictureTaken(byte[] data, Camera camera) { 

      File pictureFile = getOutputMediaFile(); 
      if (pictureFile == null){ 
       Toast.makeText(getActivity(), "Image retrieval failed.", Toast.LENGTH_SHORT) 
       .show(); 
       return; 
      } 

      try { 
       FileOutputStream fos = new FileOutputStream(pictureFile); 
       fos.write(data); 
       fos.close(); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    }; 
1

Native implementazione è il modo migliore.

XML

<com.google.android.cameraview.CameraView 
android:id="@+id/camera" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:keepScreenOn="true" 
android:adjustViewBounds="true" 
app:autoFocus="true" 
app:aspectRatio="4:3" 
app:facing="back" 
app:flash="auto"/> 

All'interno Attività/Frammento

Inizio fotocamera

mCameraView.start(); 

arresto fotocamera

mCameraView.stop(); 

Open source: Google

+0

questo è impressionante –

Problemi correlati