2016-04-12 3 views
0

Я новичок в android. У меня есть 2 вида поверхности (localView и remoteView) по умолчанию. Я помещаю localView поверх remoteView с помощью «localView.setZOrderMediaOverlay (true)». До сих пор все работает нормально, но у меня есть кнопка (swap), которая заменяет два рассматривает позицию таким образом, что remoteView должен располагаться поверх localView. я сделал «localView.setZOrderMediaOverlay (false)»; и "remoteView.setZOrderMediaOverlay (true)" в onClickListner, но не работает.localView.setZOrderMediaOverlay (false) не работает

remoteView не отображается поверх localView. Я вижу, что это за localView.

вот мой код:

 <SurfaceView 
      android:id="@+id/remote_surface" 
      android:layout_height="fill_parent" 
      android:layout_width="fill_parent" 
      android:background="@drawable/layout_border" 
      /> 
     <SurfaceView 
      android:id="@+id/local_surface" 
      android:layout_height="180px" 
      android:layout_width="180px" 
      android:background="@drawable/layout_border" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentBottom="true"/> 

Спасибо заранее.

+1

как описано в документе API: 'Обратите внимание, что это должно быть установлено до того, как окно окна просмотра поверхности будет прикреплено к диспетчеру окон. 'поэтому я думаю, что он не работает динамически, только до того, как представления будут прикреплены к окну. Я думаю, здесь вам нужно немного изменить свой код ... – Opiatefuchs

ответ

0

Как отмечает @Opiatefuchs в комментарии, the docs говорит, что вы не можете изменить Z-порядок SurfaceView Surface после того, как поверхность была настроена.

У вас есть несколько вариантов. Одна из возможностей - изменить способ рисования поверхностей. Если, например, оба были нарисованы с помощью OpenGL ES, вы просто замените контекст EGL, связанный с рендерерами. (Или, если на то пошло, нарисуйте весь контент на одном SurfaceView и измените порядок или глубину, на котором отображается контент.)

Для других источников данных, например. MediaPlayer, возможно, это не так просто или просто. Возможно, стоит заменить SurfaceView на TextureView, поскольку это можно заказать через макет, как и любой другой вид. Это, вероятно, будет менее эффективным, чем SurfaceView, хотя из-за дополнительной копии.