Wie man SurfaceView transparent macht

Lesezeit: 4 Minuten

Wie man SurfaceView transparent macht
Sunil Pandey

Hallo zusammen, ich möchte meine DrawingSurface-Ansicht transparent machen. Ich habe vieles versucht, aber es funktioniert nicht.

Hier ist mein XML-Code, um meine Oberflächenansicht transparent zu machen

<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="https://stackoverflow.com/questions/5391089/@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>

Wie man SurfaceView transparent macht
TantanQi

Versuchen Sie dies im Konstruktor:

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

  • Wow, ich habe darauf gehämmert, nachdem ich bereits das transparente Pixelformat sowie einen transparenten Hintergrund im XML hinzugefügt hatte. Es stellt sich heraus, dass der Aufruf „setZOrderOnTop(true)“ KRITISCH ist. Danke für diesen Beitrag, sonst hätte ich das nie versucht.

    – ProjektJourneyman

    2. Dezember 2011 um 0:25 Uhr


  • Dies funktioniert hervorragend, außer dass setZOrderOnTop() bedeutet, dass Sie keine Grafiken auf dieser SurfaceView platzieren können, was unglücklich ist. =\

    – drk

    16. August 2012 um 20:17 Uhr

  • Aber es deckt alle anderen Ansichten des Layouts ab, dh wenn ich auf die Oberflächenansicht zeichne, werden alle Bilder / Schaltflächen gemalt. Wie komme ich aus diesem Problem heraus?

    – Himmelsfreak

    7. Mai 2013 um 12:12 Uhr

  • Versuchte in meiner Seite. Funktioniert großartig auf 4.0, aber 2.3.

    – wayne_bai

    21. Mai 2013 um 3:37 Uhr

  • Der „Multi-Surface-Test“ in Grafika demonstriert drei transparente, überlappende SurfaceViews gemischt mit der View-UI-Ebene. github.com/google/grafika/blob/master/src/com/android/grafika/… . FWIW, “versuchen Sie dies im Konstruktor” sollte wahrscheinlich lauten “versuchen Sie dies in onCreate()“, und das Ändern des Pixelformats von RGB565 auf RGB888 ist auch ziemlich notwendig.

    – fad

    26. Juli 2015 um 23:16 Uhr


sfvTrack.setZOrderOnTop(true); 

platziert die SurfaceView über dem Fenster, was bedeutet, dass Sie keine Elemente über der SurfaceView hinzufügen können.

Wenn Sie Ansichten über der Oberflächenansicht hinzufügen möchten; Sie sollten in Betracht ziehen, Folgendes zu verwenden:

setZOrderMediaOverlay(true);

stattdessen. Dadurch wird diese SurfaceView über anderen SurfaceViews platziert, aber immer noch hinter dem Fenster, sodass Sie andere sichtbare Ansichten über der Oberflächenansicht hinzufügen können.

Ist Ihre DrawingSurface und Erweiterung von SurfaceView?

Es gibt keine Möglichkeit, ein SurfaceView dazu zu bringen, das zu tun, was Sie wollen. Die Mechanik der Oberflächenansicht ist so, dass dahinter nichts sichtbar sein kann. (Siehe die Antwort hier http://groups.google.com/group/android-developers/browse_thread/thread/8d88ef9bb22da574)

Ich habe Ihre Hierarchie mit einer benutzerdefinierten Ansicht getestet, die SurfaceView erweitert, und ich sehe Ihr Problem. Wenn ich zu einer benutzerdefinierten Ansicht wechsle, die View einfach erweitert, kann ich Transparenz erhalten.

  • danke slund, du hast recht, aber es muss eine Kameravorschau dahinter gestellt werden und es ist meine Zeichenfläche, also möchte ich auf die Kameravorschau zurückgreifen

    – Sunil Pandey

    23. März 2011 um 6:58 Uhr


TexttureView wird besser für Ihre Bedürfnisse sein als SurfaceViewIch glaube.

924200cookie-checkWie man SurfaceView transparent macht

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy