Есть ли способ прослушать, когда камера загрузится? cwac-камера

У меня есть настройка фрагмента камеры CWAC, и все работает хорошо. Есть несколько настроек, которые я хотел бы сделать.

  1. Я хотел бы показать ProgressBar, поскольку фрагмент камеры загружается в его хост Activity/Fragment
  2. После того, как пользователь сделал снимок, я хочу снова показать наложение ProgressBar на кнопку фотографирования, чтобы он понял, что не может сразу сделать снимок, пока камера снова не будет готова.

Изучив документацию для камеры CWAC, я не нашел ничего, что поддерживало бы такой обратный вызов. Такое вообще можно слушать? Если да, есть ли в библиотеке простой способ сделать это, которого я не вижу?

Заранее спасибо за вашу помощь.


person Ryan Simon    schedule 07.08.2014    source источник


Ответы (2)


Чтобы получить уведомление, когда камера загружается и начинается предварительный просмотр, используйте этот код:

public class MyCameraFragment extends CameraFragment {

    CameraView cameraView;

    Camera.PreviewCallback previewCallback = new Camera.PreviewCallback() {
        @Override
        public void onPreviewFrame(byte[] data, Camera camera) {
            // camera is "loaded" and first preview is sent to the screen
            // do whatever you want to do
        }
    };

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        cameraView = // code to find your CameraView
    }

    @Override
    public void onResume() {
        super.onResume();
        Camera camera = cameraView.getCamera();
        if (null != camera) {
            camera.setOneShotPreviewCallback(previewCallback);
        }
    }

    private void somehowRestartedCameraViewForWhateverReason() {
        if (null != cameraView) {
            cameraView.onResume(); // force it to restart
            Camera camera = cameraView.getCamera();
            if (null != camera) {
                camera.setOneShotPreviewCallback(previewCallback);
            }
        }
    }
}

Я использовал этот код для обновления пользовательского интерфейса, поэтому кнопка вспышки появляется только при поддержке камеры:

camera.getParameters().getSupportedFlashModes()

вернуть ненулевой список и размер > 0. Обычно на передней камере нет вспышки, но кто знает?

Если вы хотите переключить камеру, см. мой другой ответ здесь: Камера CWAC – просмотр нескольких камер в одном макете (и переключение между ними)

person John Pang    schedule 13.11.2014

Я хотел бы показать ProgressBar, когда камера загружается в Activity/Fragment

Я понятия не имею, что означает «загрузка в Activity/Fragment».

После того, как пользователь сделал снимок, я хочу снова показать наложение ProgressBar на кнопку фотографирования, чтобы он понял, что не может сразу сделать снимок, пока камера снова не будет готова.

Вы знаете, когда вы звоните takePicture(). Вы можете узнать, когда saveImage() вызывается на вашем CameraHost, создав собственную реализацию CameraHost или собственный подкласс SimpleCameraHost. В это время вы можете выполнять свою ProgressBar работу. Вы можете увидеть это в демонстрационном приложении, где я отключаю и повторно включите элемент панели действий для той же цели.

person CommonsWare    schedule 07.08.2014
comment
Извините за путаницу. Я отредактировал выше. Я просто хотел сказать, чтобы показать индикатор выполнения, когда камера загружается в поле зрения в первый раз при запуске Activity. Спасибо за совет. Я проверю это и посмотрю, работает ли это. - person Ryan Simon; 07.08.2014
comment
@RyanSimon: я просто хотел сказать, чтобы показать индикатор выполнения, поскольку камера загружается в поле зрения в первый раз при запуске действия - поместите ProgressBar в действие, и фрагмент будет идти поверх него (ось Z ), Наверное. - person CommonsWare; 07.08.2014