2013-09-22 13 views
6

Sto provando a cambiare semplicemente il colore di sfondo di TextureView. Mi aspetto che questo colore venga visto attraverso l'anteprima della fotocamera semitrasparente. Per qualche ragione non lo è. Se rimuovo completamente l'anteprima della fotocamera da onSurfaceTextureAvailable, la vista rimane bianca (o non può essere vista). Qualche idea? Sto cercando di ottenere una finestra di TextureView che a volte contiene l'anteprima della fotocamera e altre volte è un colore semplice di mia scelta. Grazie.TextureView setBackgroundColor non funziona

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

Si prega di condividere il codice completo, in modo che possiamo aiutare correttamente. –

+0

hai riparato? – sandrstar

+0

stesso problema. Qualche soluzione? – Alexis

risposta

1

La mia soluzione era quella di impostare opaca su false:

textureView.setOpaque(false); 

ma, quando lo fai il colore di sfondo TextureView sarà irrilevante. Quindi, ho inserito il mio TextureView all'interno di un FrameLayout e impostato il suo colore di sfondo. Quando lo fai, il colore di sfondo FrameLayout è il colore che vedi 'dietro', o se lo TextureView è vuoto.

Problemi correlati