TextureView setBackgroundColor not working

I'm trying to just change the background color of a TextureView. I would expect this color to be viewed through a translucent camera view. For some reason this is not the case. If I completely remove the cameraโ€™s preview from the onSurfaceTextureAvailable screen, the view remains white (or not visible). Any ideas? I am trying to get a TextureView window that sometimes contains a camera preview, and other times a plain color of my choice. Thanks.

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 a new Camera preview frame } } } 
+6
source share
1 answer

My solution was to set the opacity to false:

 textureView.setOpaque(false); 

but at the same time, the background color of the TextureView will be irrelevant. So, I put the TextureView inside the FrameLayout and set its background color. When you do this, the FrameLayout background FrameLayout is the color that you see โ€œbehindโ€, or if the TextureView empty.

+1
source

Source: https://habr.com/ru/post/954334/


All Articles