2016-02-03 8 views
1

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

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

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

ответ

0

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

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

setZOrderMediaOverlay (булево isMediaOverlay)

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

2

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

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

Вы можете визуализировать TextureView (или что-либо еще с поверхностью) с помощью OpenGL ES. См., Например, операцию «простой GL в TextureView» в Grafika.

+0

Thx за ваш ответ! Теперь я использовал TexturveView, но проблема в том, что он не прозрачен. А также ** setOpaque (false) ** не работает ... –

+0

'setOpaque (false)' необходимо (система предполагает непрозрачность по умолчанию). Убедитесь, что вы очищаете пиксели с прозрачностью, например. 'canvas.drawColor (Color.TRANSPARENT, PorterDuff.Mode.CLEAR)' (обратите внимание на явный режим смешивания) или 'glClear (0,0,0,0)'. Вы используете 'setAlpha()'? Один ответ (http://stackoverflow.com/questions/18993355/) нашел успех, поиграв с макетом. – fadden

+0

относящийся к: http://stackoverflow.com/a/22571903/4291264 –