我正在开发一个相机应用程序,我将使用前置和后置摄像头。我正在使用这样的 TextureView:
<TextureView
android:id="@+id/textureView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
/>
和后面的代码:
renderer = new CameraRenderer(this, isFrontCamera);
textureView.setSurfaceTextureListener(renderer);
CameraRenderer
类实现SurfaceTextureListener
public class CameraRenderer implements Runnable, TextureView.SurfaceTextureListener{...
我用这样的方法设置相机onSurfaceTextureAvailable
:
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
if (renderThread != null && renderThread.isAlive()) {
renderThread.interrupt();
}
renderThread = new Thread(this);
surfaceTexture = surface;
gwidth = width;
gheight = height;
// Open camera
int cameraId;
if(isFrontCamera)
cameraId = getFrontCamera();
else
cameraId = getBackCamera();
camera = Camera.open(cameraId);
renderThread.start();
}
问题:
当我想更改相机并单击按钮时,我正在创建一个新的 CameraRenderer 实例并设置为 textureView
textureView.setSurfaceTextureListener(renderer);
但是从未调用过 CameraRenderer 类中的 onSurfaceTextureDestroyed 方法,也没有调用 onSurfaceTextureAvailable 方法。
我可以自己调用 onSurfaceTextureDestroyed 方法,但我无法将第二个相机预览设置为 textureView,因为第二次调用 onSurfaceTextureAvailable 方法。
这是我的 onSurfaceTextureDestroyed 方法:
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
if (camera != null) {
camera.stopPreview();
camera.release();
}
if (renderThread != null && renderThread.isAlive()) {
renderThread.interrupt();
}
CameraFilter.release();
return true;
}
最后一点:我尝试将侦听器设置为 null 但不起作用。
那么如何重新设置 textureView 侦听器。提前致谢!