У меня есть приложение с SurfaceView и MapView. Они отображаются в одном окне, например:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainlayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<com.google.android.maps.MapView
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
android:apiKey="XXXXXXXXredactedXXXXXXXXXXXXx"
/>
<class.that.extends.SurfaceView
android:id="@+id/surfaceview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#00000000"
/>
</RelativeLayout>
Обратите внимание, что MapView предшествует SurfaceView. Из-за этого MapView рисуется «под» SurfaceView, и все, что я вижу, - это черный фон с тем, что я рисую на SurfaceView. Если я поменяю порядок и поместлю SurfaceView первым в файл, а MapView - вторым, MapView будет отображен без отображения SurfaceView.
Согласно SurfaceView Javadoc :
Поверхность имеет Z-порядок, так что она находится за окном, удерживая ее SurfaceView; SurfaceView пробивает отверстие в своем окне, чтобы его поверхность отображалась. Иерархия представления позаботится о правильной компоновке с Surface любых братьев и сестер SurfaceView, которые обычно появляются поверх него.
Для меня это означает, что я должен быть в состоянии поместить SurfaceView первым в файл, и он должен «пробить» MapView и показать, что у него есть. Но на самом деле они кажутся двумя видами, и одновременно виден только один.
После размышления: я попытался установить фон # 00000000, чтобы альфа фона была нулевой (то есть прозрачной), но это не оказало никакого влияния.