示例#1
0
  /** Capture a still picture. This method should be called when we get a response in */
  @TargetApi(CAMERA_2_API_LIMIT)
  private void captureStillPicture() {
    try {
      final Activity activity = CameraActivity.this;
      if (activity == null || mCamera2Device == null) {
        return;
      }

      mFlashCaptureAnimationView.setVisibility(View.VISIBLE);
      mFlashCaptureSpring.setCurrentValue(0);
      mFlashCaptureSpring.setEndValue(1.0f);

      mTextureView.setDrawingCacheEnabled(true);
      Bitmap cameraPreview = mTextureView.getBitmap();
      if (cameraPreview == null) {
        Etils.showToast(CameraActivity.this, "Camera preview bitmap null");
      }
      mPreviewCapture.setImageBitmap(cameraPreview);
      mPreviewCapture
          .animate()
          .alpha(1.0f)
          .setInterpolator(FAST_OUT_SLOW_IN_INTERPOLATOR)
          .setDuration(1500)
          .withEndAction(
              new Runnable() {
                @Override
                public void run() {
                  mPreviewCapture
                      .animate()
                      .alpha(0.0f)
                      .setInterpolator(FAST_OUT_SLOW_IN_INTERPOLATOR)
                      .scaleX(0.3f)
                      .scaleY(0.3f)
                      .translationX(Etils.dpToPx(300))
                      .translationY(Etils.dpToPx(500))
                      .withEndAction(
                          new Runnable() {
                            @Override
                            public void run() {
                              mPreviewCapture.setScaleX(1.0f);
                              mPreviewCapture.setScaleY(1.0f);
                              mPreviewCapture.setTranslationX(1.0f);
                              mPreviewCapture.setTranslationY(1.0f);
                            }
                          });
                }
              });

      // This is the CaptureRequest.Builder that we use to take a picture.
      final CaptureRequest.Builder captureBuilder =
          mCamera2Device.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
      captureBuilder.addTarget(mImageReader.getSurface());

      // Use the same AE and AF modes as the preview.
      captureBuilder.set(
          CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
      setAutoFlash(captureBuilder);

      // Orientation
      int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();
      captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, getOrientation(rotation));

      Date date = new Date();
      SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH.mm.ss");
      final String timestampFilename = dateFormat.format(date);
      mFile = new File(getExternalFilesDir(null), timestampFilename + ".jpg");
      CameraCaptureSession.CaptureCallback CaptureCallback =
          new CameraCaptureSession.CaptureCallback() {
            @Override
            public void onCaptureCompleted(
                @NonNull CameraCaptureSession session,
                @NonNull CaptureRequest request,
                @NonNull TotalCaptureResult result) {
              lawg.d("Saved file: " + mFile.toString());
              unlockFocus();
            }
          };

      mCamera2CaptureSession.stopRepeating();
      mCamera2CaptureSession.capture(captureBuilder.build(), CaptureCallback, mBackgroundHandler);

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