在Android中使用SurfaceTexture进行相机预览的示例

And*_*Dev 26 android

我正在尝试使用SurfaceTexture渲染相机预览.我阅读了该文档,但无法理解它是如何工作的.

任何人都可以提供一个示例示例(非常基本的)或使用SurfaceTexture预览相机的链接.我用谷歌搜索了这个,但找不到我要找的东西.

提前致谢.

Thi*_*cha 60

如果您想使用Camera with TextureSurface,您可以实现SurfaceTextureListener界面.你必须实现4种方法:

1)onSurfaceTextureAvailable- 在这里设置你的相机

2)onSurfaceTextureSizeChanged- 在你的情况下,Android的相机将处理这种方法

3)onSurfaceTextureDestroyed- 在这里你销毁所有相机的东西.

4)onSurfaceTextureUpdated- 当你有改变的东西时,在这里更新你的纹理!

检查以下示例:

    public class MainActivity extends Activity implements SurfaceTextureListener{

    private Camera mCamera;
    private TextureView mTextureView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mTextureView = new TextureView(this);
        mTextureView.setSurfaceTextureListener(this);

        setContentView(mTextureView);
    }

    @Override
    public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
        mCamera = Camera.open();

        Camera.Size previewSize = mCamera.getParameters().getPreviewSize();
        mTextureView.setLayoutParams(new FrameLayout.LayoutParams(
                previewSize.width, previewSize.height, Gravity.CENTER));

        try {
            mCamera.setPreviewTexture(surface);
        } catch (IOException t) {
        }

        mCamera.startPreview();

    }

    @Override
    public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
        // Ignored, the Camera does all the work for us
    }

    @Override
    public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
        mCamera.stopPreview();
        mCamera.release();
        return true;
    }

    @Override
    public void onSurfaceTextureUpdated(SurfaceTexture surface) {
        // Update your view here!
    }
}
Run Code Online (Sandbox Code Playgroud)

还有两件事:不要忘记在项目清单中添加摄像头权限,并且SurfaceTexture可以从API 11获得.

  • 不要忘记将相机权限添加到清单 (6认同)