2

我正在开发一个相机应用程序,我将使用前置和后置摄像头。我正在使用这样的 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 侦听器。提前致谢!

4

0 回答 0