2013-09-22 7 views
6

Próbuję po prostu zmienić kolor tła TextureView. Spodziewam się, że ten kolor będzie widoczny w półprzezroczystym podglądzie kamery. Z jakiegoś powodu tak nie jest. Jeśli całkowicie usunę podgląd kamery z OnSurfaceTextureAvailable, widok pozostanie biały (lub nie będzie widoczny). Jakieś pomysły? Próbuję uzyskać okno TextureView, które czasami zawiera podgląd kamery, a innym razem jest to mój zwykły kolor. Dzięki.TextureView setBackgroundColor nie działa

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

Proszę udostępnić pełny kod, abyśmy mogli pomóc właściwie. –

+0

naprawiłeś to? – sandrstar

+0

ten sam problem. Jakieś rozwiązanie? – Alexis

Odpowiedz

1

Moje rozwiązanie było ustawić nieprzezroczysty false:

textureView.setOpaque(false); 

ale kiedy to zrobić, że kolor tła TextureView będzie nieistotny. A więc - umieściłem mój TextureView wewnątrz FrameLayout i ustawiłem jego kolor tła. Gdy to zrobisz, kolor tła FrameLayout to kolor, który widzisz "za" lub jeśli TextureView jest pusty.

Powiązane problemy