如何动态创建一个SurfaceView来预览相机
如何动态创建一个SurfaceView来预览相机
我使用new SurfaceView对象来预览相机,但是提示错误Camera﹕ app passed NULL surface。
这是为什么呢?
测试代码如下:
xml布局文件 :
android:layout_height="wrap_content" android:text="测试" android:onClick="btnDrawOnClieck3">
MainActivity文件
public class MainActivity extends ActionBarActivity {
private final static String TAG_LOG="sfv2App";
LinearLayout mLayout;
SurfaceView sfv;
SurfaceHolder sfh;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG_LOG, "onCreate");
mLayout = (LinearLayout) this.findViewById(R.id.LinearLayout02); //获取LinearLayout显示视图
}
public void btnDrawOnClieck3(View source) {
setTitle("btnDrawOnClieck3");
Camera camera = null;
sfv = new SurfaceView(this);
mLayout.addView(sfv); //添加到一个容器里面显示
sfh = sfv.getHolder();
// 此处默认打开后置摄像头, 通过传入参数可以打开前置摄像头
camera = Camera.open(0); //①
camera.setDisplayOrientation(90); //设置预览方向,
if (camera != null )
{
try
{
Camera.Parameters parameters = camera.getParameters(); //获取摄像头参数
// 设置预览照片的大小
parameters.setPreviewSize(200, 200);
// 设置预览照片时每秒显示多少帧的最小值和最大值
parameters.setPreviewFpsRange(4, 10);
// 设置图片格式
parameters.setPictureFormat(ImageFormat.JPEG);
// 设置JPG照片的质量
parameters.set("jpeg-quality", 85);
// 设置照片的大小
parameters.setPictureSize(200, 200);
// 通过SurfaceView显示取景画面
camera.setPreviewDisplay(sfh);
// 开始预览
camera.startPreview();
}
catch (Exception e) {
e.printStackTrace();
}
}
}
/*...其他省略....*/
}
------解决思路----------------------
你加holderCallback试试 当执行onSurfaceCreated的时候 再执行camera.setPreviewDisplay(sfh);