Android GLSurfaceView с возможностью рисования фона

У меня есть GLSurfaceView с возможностью рисования в качестве фона, однако при рендеринге без SurfaceView.setZOrderOnTop(true) виден только фон.

Мне нужно избегать использования setZOrderOnTop(true), потому что поверх GLSurfaceView используется статический TextView.

Любые предложения, как заставить это работать?


person Jlam    schedule 02.10.2010    source источник


Ответы (4)


GLSurfaceView не может иметь фон. Принцип работы представления поверхности заключается в том, что вы вырезаете дыру в окне вашей деятельности и показываете другую поверхность позади. Установка setZOrderOnTop(true) перемещает поверхность над окном действия.

person Romain Guy    schedule 02.10.2010
comment
Спасибо, это было очень полезно! Есть ли способ, который вы могли бы порекомендовать для достижения того, что мне нужно: статическое фоновое изображение -> 3D-контент -> дополнительные кнопки просмотра вверху или это единственный способ просто отобразить статический фон как текстуру на полигоне? - person Jlam; 04.10.2010
comment
В итоге я просто визуализировал фон на многоугольнике позади всего остального... спасибо за подсказку! - person Jlam; 12.10.2010

ЛОЖЬ! Ты можешь это сделать. Просто пример, чтобы показать, как это работает.

glRenderer  = new OpenGLRenderer(context);
view = new GLSurfaceView(context);
view.setEGLConfigChooser(8, 8, 8, 8, 16, 0);
view.setRenderer(glRenderer);
view.getHolder().setFormat(PixelFormat.RGBA_8888);
view.getHolder().setFormat(PixelFormat.TRANSLUCENT);
view.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);

Затем используйте framelayout, чтобы поместить вид в glsurfaceview!

person jonathan    schedule 19.02.2011
comment
Спасибо. Это сделало моего потомка GLSurfaceView прозрачным. Но на самом деле REDERMODE_CONTINUOUSLY — это значение по умолчанию, и для меня добавление последней строки приводит к сбою приложения. - person Aleks N.; 12.01.2012
comment
Это потому, что вы должны установить RenderMode перед view.setRenderer - person Justin Buser; 04.04.2012
comment
что добавить в FrameLayout, чтобы другие виды отображались выше GLsurfaceView? - person mayank_droid; 04.09.2013

Попробуйте setZOrderMediaOverlay(true); который должен поместить слой gl над фоном, но ниже окна.

person Justin Buser    schedule 04.04.2012

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

person Miguel Morales    schedule 02.10.2010
comment
Надоело, но не работало из-за следующих условий: 1. Слой gl имеет постоянное фоновое изображение. 2. есть дополнительные элементы поверх слоя gl, такие как кнопки и т. д. Невозможно было установить статическое изображение в качестве фона на слое gl, потому что реальное 3D-содержимое не будет отображаться, если я не установлю ZOrderOnTop(true) на слое gl. слой гл. Но если я это сделаю, то дополнительные элементы окажутся под слоем gl. - person Jlam; 04.10.2010