Я думаю, что многие люди пробовали это. Google Enginee четко заявил ( здесь ), что вам следует избегать укладки Surface Views. Даже если кто-то нашел какой-то трюк для этого, он, вероятно, несовместим и приведет к проблемам.
Я думаю, что это дает три варианта, в зависимости от ваших требований:
- Вид сверху на поверхность
Используйте вид поверхности для предварительного просмотра камеры и накладывайте поверх него вид. Недостатком этого подхода является то, что рисование в «нормальных» представлениях а) медленнее, а б) происходит в потоке пользовательского интерфейса. Вы можете обойти б), если вы реализуете потоки самостоятельно. Но, в общем, это, вероятно, тот путь, если ваши оверлеи содержат что-то вроде элементов пользовательского интерфейса или несколько Drawables, которые не нужно обновлять слишком часто.
Это даст вам лучшую производительность и меньше накладных расходов во время выполнения. У вас есть только один SurfaceView. Скомпонуйте оверлеи на вашем SurfaceView и нарисуйте там все. Конечно, вы можете комбинировать оба подхода.
- Делайте все в GLSurfaceView
Это, вероятно, путь к реальной производительности. Как и выше, но с визуализацией вида камеры в текстуру OpenGL в GLSurfaceView .