サーフェスビューを透明にする方法


83

こんにちは、DrawingSurfaceビューを透明にしたいです。私は多くのことを試しましたが、うまくいきません。

これが私の表面ビューを透明にするための私のxmlコードです

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:src="@drawable/icon" >
        </ImageView>

        <LinearLayout
            android:id="@+id/linearLayout1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="#00000000" >

            <codewalla.android.drawings.DrawingSurface
                android:id="@+id/drawingSurface"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent" >
            </codewalla.android.drawings.DrawingSurface>
        </LinearLayout>
    </FrameLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/colorRedBtn"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="10"
            android:onClick="onClick"
            android:text="R" />

        <Button
            android:id="@+id/colorBlueBtn"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="10"
            android:onClick="onClick"
            android:text="G" />

        <Button
            android:id="@+id/colorGreenBtn"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="10"
            android:onClick="onClick"
            android:text="B" />

        <Button
            android:id="@+id/undoBtn"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="10"
            android:onClick="onClick"
            android:text="U" />

        <Button
            android:id="@+id/redoBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="10"
            android:onClick="onClick"
            android:text="R" />
    </LinearLayout>

</RelativeLayout>

回答:


212

コンストラクターでこれを試してください:

SurfaceView sfvTrack = (SurfaceView)findViewById(R.id.sfvTrack);
sfvTrack.setZOrderOnTop(true);    // necessary
SurfaceHolder sfhTrackHolder = sfvTrack.getHolder();
sfhTrackHolder.setFormat(PixelFormat.TRANSPARENT);

9
うわー、私はこれを打ちのめしていて、XMLに透明なピクセル形式と透明な背景をすでに追加しています。'setZOrderOnTop(true)'呼び出しは重要であることがわかりました。これを投稿してくれてありがとう、私はそれ以外の方法でそれを試したことはありませんでした。
ProjectJourneyman 2011

42
これは、setZOrderOnTop()がこのSurfaceViewの上にグラフィックを配置できないことを意味することを除いて、うまく機能します。これは残念なことです。= \
drc 2012

2
ただし、レイアウト上の他のすべてのビューをカバーします。つまり、サーフェスビューに描画すると、画像/ボタンがペイントされます。どうすればこの問題から抜け出すことができますか?
skygeek 2013年

私の側で試してみました。4.0ではうまく機能しますが2.3です。
wayne_bai 2013年

2
Grafikaの「マルチサーフェステスト」は、ビューUIレイヤーと混合された3つの透明なオーバーラップSurfaceViewを示しています。github.com/google/grafika/blob/master/src/com/android/grafika/…。FWIW、「コンストラクターでこれを試してください」はおそらく「これを試してみてください」と読む必要がonCreate()あり、ピクセル形式をRGB565からRGB888に変更することもかなり必要です。
fadden 2015

8
sfvTrack.setZOrderOnTop(true); 

はwindowViewをウィンドウの上に配置します。つまり、surfaceViewの上にアイテムを追加することはできません。

サーフェスビューの上にビューを追加する場合。以下の使用を検討する必要があります。

setZOrderMediaOverlay(true);

代わりに。これにより、このsurfaceViewが他のsurfaceViewの上に配置されますが、ウィンドウの後ろに配置されるため、サーフェスビューの上に他の表示ビューを追加できます。


4

DrawingSurfaceとSurfaceViewの拡張機能ですか?

SurfaceViewにあなたが望んでいることを実行させる方法はありません。表面ビューのメカニズムは、背後に何も見えないようになっています。(ここで回答を参照してくださいhttp://groups.google.com/group/android-developers/browse_thread/thread/8d88ef9bb22da574

SurfaceViewを拡張するカスタムビューを使用して階層をテストしましたが、問題があります。ビューを拡張するだけのカスタムビューに切り替えると、透明度を得ることができます。


おかげさまで、あなたは正しいですが、カメラのプレビューを後ろに置く必要があり、それが私の描画面なので、カメラのプレビューに基づいて描画したいと思います
Sunil Pandey 2011年

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.