SurfaceView と MapView を持つアプリケーションがあります。次のように、それらは 1 つのビューに表示されます。
<?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 を 2 番目に配置すると、MapView が描画され、SurfaceView は表示されません。
SurfaceView Javadocによると:
サーフェスは、SurfaceView を保持するウィンドウの背後にあるように Z オーダーされます。SurfaceView はウィンドウに穴を開けて、その表面を表示できるようにします。ビュー階層は、通常はその上に表示される SurfaceView の兄弟を Surface と正しく合成する処理を行います。
私にとって、これは、SurfaceView をファイルの最初に配置し、MapView を「パンチスルー」して、その内容を表示できるようにする必要があることを意味します。しかし、そのままでは、それらは 2 つのビューのように見え、一度に見えるのは 1 つだけです。
考えた後: 背景のアルファがゼロ (つまり透明) になるように背景を #00000000 に設定しようとしましたが、効果はありません。