SurfaceView中如何获取SurfaceHolder

无论是Camera预览, 还是MediaPlayer播放使用SurfaceView的时候都需要设置SurfaceHolder, 下面是获取SurfaceHolder的2种方式

xml中自定义SurfaceView

如果直接在xml中使用SurfaceView, 在findViewbyId之后就已经没机会获取SurfaceHolder了,
所以需要重写SurfaceView并实现SurfaceHolder.Callback, 这样在构造函数中添加回掉

 holder = getHolder(); holder.addCallback(this);

然后就能在SurfaceHolder.Callback的surfaceCreated(SurfaceHolder holder)方法中收到SurfaceHolder

通过addView添加SurfaceView

首先new一个SurfaceView, 然后通过surfaceView.getHolder().addCallback(callback) 获取
surfaceHolder, callback:

SurfaceHolder.Callback callback = new SurfaceHolder.Callback() {
        @Override
        public void surfaceCreated(SurfaceHolder surfaceHolder) {
            // 获取到surfaceHolder
        }

        @Override
        public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
        }

        @Override
        public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
        }
    };

当该SurfaceView被add到父View之后就会触发surfaceCreated方法, 从而获取到SurfaceHolder

相关文章
相关标签/搜索