Предварительный просмотр Camera2 черный, если я добавлю GLSurfaceView спереди

Я хочу сделать анимацию OpenGL (GLSurfaceView) перед предварительным просмотром API Camera2 (TextureView), но анимация не прозрачна. Я добавил GLSurfaceView напротив TextureView,

  • это работает только если я установил setZOrderOnTop(true); в GLSurfaceView, но тогда все кнопки, а также ящик находится позади вида...

Есть ли способ сделать GLSurfaceView (анимация) прозрачный?

2 ответа

Решение

setZOrderOnTop() работает, но это означает, что вы не можете иметь ничего выше прозрачного SurfaceViewК сожалению,

Единственный способ, чтобы заменить TextureView предварительного просмотра Camera2, с SurfaceView, Тогда я могу использовать setZOrderMediaOverlay(true); в GLSurfaceView,

setZOrderMediaOverlay(логическое значение isMediaOverlay)

Управляет размещением поверхности вида поверхности поверх другого обычного вида поверхности в окне (но все же за самим окном).

SurfaceView (и его подкласс GLSurfaceView) состоят из двух частей: Surface и View. Поверхность обеспечивает доступ к отдельному уровню, независимому от уровня пользовательского интерфейса View. Вы можете расположить его перед или за слоем вида, но он не может поместиться "между" видами.

С помощью setZOrderOnTop(true) правильный способ разместить слой Surface перед окнами Views. Если это не то, что вам нужно, вы должны вместо этого рассмотреть использование TextureView, так как они отображаются на слое View и могут быть расположены выше или ниже отдельных видов.

Вы можете выполнить рендеринг в TextureView (или что-либо еще с Surface) с помощью OpenGL ES. См., Например, "простое GL в TextureView" в Grafika.

Другие вопросы по тегам