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