Я использую Android Camera2 API . Я хотел бы знать, когда подходящее время:
- покажет кнопку TakePicture изначально (т.е. камера готова к съемке
фотография).
- показать эту кнопку еще раз (если процесс фотосъемки не выполняется, и, конечно, когда это сделано), потому что я скрываю ее при нажатии на нее (чтобы сделать снимок).
Я пытался takePicture.setVisibility(View.GONE)
в lockFocus()
и takePicture.setVisibility(View.VISIBLE)
в unlockFocus()
.
Хотя это работает большую часть времени, иногда кнопка исчезает и больше не появляется (я думаю, что процесс съемки не удался), особенно при быстром нажатии на нее (как только она появляется на экране). На этом этапе ошибок и аварий не происходит.
Код взят из googlesamples / android-Camera2Basic .
Обновление:
Я пытался takePicture.setVisibility(View.VISIBLE)
внутри onCaptureSequenceCompleted
. Кнопка действительно появляется, но процесс захвата изображения не возобновляется при нажатии на нее (см. это семисекундное видео ). Когда это происходит, onCaptureFailed
не вызывается. Однако застревает на неопределенное время в STATE_WAITING_PRECAPTURE
или STATE_WAITING_NON_PRECAPTURE
из-за aeState
, который не удовлетворяет условию if
.
case STATE_WAITING_PRECAPTURE: {
// CONTROL_AE_STATE can be null on some devices
Integer aeState = result.get(CaptureResult.CONTROL_AE_STATE);
if (aeState == null ||
aeState == CaptureResult.CONTROL_AE_STATE_PRECAPTURE ||
aeState == CaptureRequest.CONTROL_AE_STATE_FLASH_REQUIRED) {
mState = STATE_WAITING_NON_PRECAPTURE;
}
break;
}
case STATE_WAITING_NON_PRECAPTURE: {
// CONTROL_AE_STATE can be null on some devices
Integer aeState = result.get(CaptureResult.CONTROL_AE_STATE);
if (aeState == null || aeState != CaptureResult.CONTROL_AE_STATE_PRECAPTURE) {
mState = STATE_PICTURE_TAKEN;
captureStillPicture();
}
break;
}