0

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 に設定しようとしましたが、効果はありません。

4

2 に答える 2

0

この場合、アルファ設定だけではあまり役に立ちません。

ビューをセットアップするときは、ビューの SurfaceHolder の PixelFormat を設定します。

    glsView = (GLSurfaceView) findViewById(R.id.surfaceview);
    glsView.getHolder().setFormat(PixelFormat.TRANSLUCENT);
于 2010-10-21T13:27:02.543 に答える
0

スムーズに描画できる優れた機能があるにもかかわらず、SurfaceView を使用することをやめてしまいました。今は、通常の古い View を使用して、その onDraw メソッドをオーバーライドしています。下の MapView は現在、この新しいビューが描画されるたびに更新されていますが、ビューの描画キャッシュ機能を使用してそれを簡素化することを検討しています。

于 2010-10-29T23:56:11.087 に答える