2013-03-07 18 views
6

Ich möchte eine Hintergrundfarbe für die Oberflächenansicht zu meiner Kameraoberflächenansicht festlegen.Hintergrundfarbe der Oberflächenansicht festlegen

Ich verwende this für die Umsetzung der gleichen. Aber dieses Beispiel ist nicht vollständig. Kann mir bitte jemand mit einem anderen nützlichen Link helfen. diese

Dank

Antwort

2

Verwendung surfaceview_obj.setBackgroundColor (int Farbe) Hintergrundfarbe zu setzen ..

diesen Code weiße Farbe als Hintergrund verwenden setzen

surfaceview_obj.setBackgroundColor(0Xffffffff); 

check this

+0

Hi @ Swarnedu. Ihre Antwort ist richtig, aber es wird die Oberfläche als undurchsichtig, ich möchte nur eine transparente Hintergrundfarbe –

+1

Ich bin mir nicht sicher, aber nur einen Versuch mit diesem Farbcode 0X00ffffff –

+0

Ich habe es überprüft. Es macht immer die opake Oberflächenansicht –

1

Verwenden

surfaceview.getHolder().setFormat(PixelFormat.TRANSLUCENT); 
+2

Ich habe bereits versucht, oben, aber es hat mir nicht geholfen –

1

Sie haben einen kleinen Hack-around zu tun, um jede Hintergrundarbeit in Surface zu machen, wie folgt aus:

überschreiben die setBackground und setBackgroundDrawable Methoden

Drawable background 

    @Override 
    public void setBackgroundDrawable(Drawable background) { 
     this.background = background; 
    } 

    @Override 
    public void setBackground(Drawable background) { 
     this.background = background; 
    } 

vergessen Sie nicht setBounds auf dem ziehbar zu nennen

@Override 
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) { 
     super.onLayout(changed, left, top, right, bottom); 
     matrix = null; 
     if (background != null) 
     background.setBounds(left, top, right, bottom); 
    } 

dann auf dem Code, den Sie sperren, zeichnen, Entriegeln und veröffentlichen die Leinwand fügen Sie den Hintergrund

Canvas c = holder.lockCanvas(); 
    if (background != null) 
     background.draw(c); 

    // do your stuff here 

    holder.unlockCanvasAndPost(c); 

funktioniert für XML und Java-Hintergründe.

18

Es gibt einen Workaround, um dies zu tun.

  1. fügen Sie eine übergeordnete Ansichtsgruppe für die Oberflächenansicht hinzu, legen Sie die Hintergrundfarbe für diese Ansichtsgruppe anstelle der Oberflächenansicht fest;

    <FrameLayout 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:background="@android:color/holo_blue_dark"> 
    
        <com.example.surfacetest.MySurface 
         android:id="@+id/surface" 
         android:layout_width="match_parent" 
         android:layout_height="match_parent" /> 
    
    </FrameLayout> 
    
  2. die folgenden für die Surface Instanz hinzufügen;

    surfaceView.setZOrderOnTop(true); 
    surfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT); 
    

Jetzt erhalten Sie die Hintergrundfarbe Sie wollen, und das ist Surface tanslucent.

+0

Dies sollte als richtige Antwort markiert werden. Es wirkt wie ein Zauber. – andreimarinescu

+2

@wrkwrk: Das funktioniert, aber ich kann keine Oberkante von SurfaceView überlagern. Haben wir eine andere Option als setXOrderOnTop (true)? –

+0

PERFEKT !!! Du hast mich vor leichten Kopfschmerzen bewahrt! –

2

zeichnen Sie einfach ein Rect-Objekt mit canvas.drawRect(). Stellen Sie die Koordinaten auf 0,0, screenX, screenY

+0

Willkommen bei Stack Overflow! Bitte erläutern Sie Ihre Frage (fügen Sie Beispiele und eine ausführlichere Erklärung hinzu). – manniL

+1

Obwohl dies die Frage nicht direkt beantwortet (ursprüngliches Plakat wollte einen Weg, seine Oberflächenansicht durchscheinend mit einem weißen Hintergrund darunter zu haben). Für diejenigen, die nur ihre Oberflächenansicht weiß machen möchten, ist eine andere Option zu verwenden: canvas.drawRGB (255,255,255); – Chris

Verwandte Themen