2013-09-22 6 views
6

Ich versuche, einfach die Hintergrundfarbe eines TextureView zu ändern. Ich würde erwarten, dass diese Farbe durch die halbtransparente Kameravorschau gesehen wird. Aus irgendeinem Grund tut es das nicht. Wenn ich die Kameravorschau komplett aus onSurfaceTextureAvailable entferne, bleibt die Ansicht weiß (oder kann nicht gesehen werden). Irgendwelche Ideen? Ich versuche, eine TextureView-Box zu erstellen, die manchmal eine Vorschau der Kamera enthält und zu anderen Zeiten eine einfache Farbe meiner Wahl ist. Vielen Dank.TextureView setBackgroundColor funktioniert nicht

import android.graphics.Color; 
import android.graphics.SurfaceTexture; 
import android.hardware.Camera; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.view.Surface; 
import android.view.TextureView; 
import android.widget.FrameLayout; 
import android.widget.RelativeLayout; 

import java.io.IOException; 

public class MainActivity extends Activity { 

    private TextureView mTextureView; 
    FrameLayout screenFrame; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     screenFrame = (FrameLayout)findViewById(R.id.screenFrame); 

     setVideoScreens(); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    private void setVideoScreens() 
    { 
     final LiveCameraActivity livecam = new LiveCameraActivity(); 

     mTextureView = new TextureView(this); 
     mTextureView.setSurfaceTextureListener(livecam); 

     FrameLayout mainFrame = (FrameLayout)findViewById(R.id.mainFrame); 
     mainFrame.addView(mTextureView); 

     int width = 640; 
     int height = 480; 

     mTextureView.setLayoutParams(new FrameLayout.LayoutParams(
       width, height)); 
     mTextureView.setY(200); 
     mTextureView.setX(200); 
     mTextureView.setBackgroundColor(Color.BLUE); 
     mTextureView.setAlpha(.5f); 
    } 

    public class LiveCameraActivity extends Activity implements TextureView.SurfaceTextureListener 
    { 
     private Camera mCamera; 

     protected void onCreate(Bundle savedInstanceState) 
     { 
      super.onCreate(savedInstanceState); 
     } 


     public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) 
     { 
      mCamera = Camera.open(); 

      try 
      { 
       mCamera.setPreviewTexture(surface); 
       mCamera.startPreview(); 
      } 
      catch (IOException ioe) 
      { 
       // Something bad happened 
      } 
     } 

     public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) 
     { 
      // Ignored, Camera does all the work for us 
     } 

     public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) 
     { 
      mCamera.stopPreview(); 
      mCamera.release(); 
      return true; 
     } 

     public void onSurfaceTextureUpdated(SurfaceTexture surface) 
     { 
      // Invoked every time there's a new Camera preview frame 

     } 
    } 
} 
+0

Bitte teilen Sie den vollständigen Code, damit wir richtig helfen können. –

+0

hast du es behoben? – sandrstar

+0

dasselbe Problem. Irgendeine Lösungsmöglichkeit? – Alexis

Antwort

1

Meine Lösung war undurchsichtig auf false gesetzt:

textureView.setOpaque(false); 

aber, wenn Sie tun, dass die Hintergrundfarbe des TextureView irrelevant sein wird. Also - ich habe meine TextureView innerhalb eines FrameLayout setzen und seine Hintergrundfarbe einstellen. Wenn Sie das tun, ist die FrameLayout Hintergrundfarbe die Farbe, die Sie "hinter" sehen, oder wenn die TextureView leer ist.