Android: onPreviewFrame никогда не вызывается без SurfaceView

На некоторых устройствах onPreviewFrame не вызывается, если SurfaceView не было установлено для отображения предварительного просмотра камеры. Однако я работаю с камерой в службе, поэтому не могу установить SurfaceView, но я все равно не хочу иметь видимый предварительный просмотр.

Как это может быть сделано? Могу ли я программно создать SurfaceView и установить его с помощью Camera::setPreviewDisplay?

Это должно быть возможно или нет?

Он работает почти на каждом телефоне без SurfaceView, но не на HTC One X и Google Nexus One...


person DominicM    schedule 28.05.2012    source источник


Ответы (3)


Согласно этому вопросу, создание SurfaceView в коде работает нормально. Хотя я не думаю, что вы можете создать его через сервис.

Другой подход состоит в том, чтобы создать SurfaceView размером 1px-1px внутри RelativeLayout и скрыть его с другим представлением поверх него. (видимость по-прежнему должна быть VISIBLE). Мы используем этот трюк для Path пользовательского интерфейса камеры, где мы визуализируем буферы предварительного просмотра через OpenGL, и он отлично работает.

person yigit    schedule 04.01.2013

В соответствии с документацией легко настраивается видимый и отображаемый вид поверхности, необходимый для активации предварительного просмотра камеры. Хотя это может быть перегружено

person Konstantin Pribluda    schedule 04.01.2013

Начиная с API 11, вы можете использовать SurfaceTexture вместо SurfaceView для получения кадров с камеры. Затем вместо использования Camera.setPreviewDisplay просто используйте Camera.setPreviewTexture.

Этот ответ, а также в этом обсудите этот момент.

person JonasVautherin    schedule 16.06.2014