SurfaceView中如何获取SurfaceHolder

来源:互联网 发布:模拟人生4社交网络 编辑:程序博客网 时间:2024/06/03 18:15

无论是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

原创粉丝点击