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