2015-08-25 14 views
5

Có thể sử dụng máy ảnh trong đoạn như chế độ xem để nó không mở được một ứng dụng khác và biến mất khỏi máy của tôi không? Một cái gì đó như SurfaceView với máy ảnh?Mở máy ảnh bên trong đoạn

Trả lời

3

Có nó được, Kiểm tra bài đăng này: https://www.airpair.com/android/android-camera-surface-view-fragment

Về cơ bản overwritting các SurfaceView và tích hợp gọi lại hình ảnh camera.

/* 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(); 
      } 
     } 
    } 

với một callback hình ảnh camera như:

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

thực hiện Native là cách tốt hơn.

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"/> 

Bên Hoạt động/Fragment

camera Bắt đầu

mCameraView.start(); 

Dừng camera

mCameraView.stop(); 

Open source: Google

+0

này là tuyệt vời –

Các vấn đề liên quan