SurfaceView 与 Camera 的相关操作

SurfaceView and Camera

  • Surface是原始图像缓冲区(raw buffer)的一个句柄,而原始图像缓冲区是由屏幕图像合成器(screen compositor)管理的。

  • SurfaceView提供了一个专门用于绘制的surface,这个surface内嵌于。你可以控制这个Surface的格式和尺寸。Surfaceview控制这个 Surface在屏幕的正确绘制位置。通过SurfaceHolder这个接口去访问Surface,而执行getHolder()方法可以得到SurfaceHolder接口

  • 当SurfaceView的窗口可见时,Surface就会被创建,当SurfaceView窗口隐藏时,Surface就会被销毁。当然了,你也可以通过复写surfaceCreated(SurfaceHolder) 和 surfaceDestroyed(SurfaceHolder) 这两个方法来验证一下Surface何时被创建与何时被销毁。

  • SurfaceView提供了一个运行在渲染线程的surface,若你要更新屏幕,你需要了解以下线程知识。 所有SurfaceView 和 SurfaceHolder.Callback的方法都应该在主线程(UI线程)里面调用,应该要确保渲染进程所访问变量的同步性。 你必须确保只有当Surface有效的时候,(也就是当Surface的生命周期在SurfaceHolder.Callback.surfaceCreated() 和SurfaceHolder.Callback.surfaceDestroyed()之间)才能让渲染进程访问。

SurfaceView与Surface的联系

  • Surface是管理显示内容的数据(implementsParcelable),包括存储于数据的交换。而SurfaceView就是把这些数据显示出来到屏幕上面。

SurfaceHolder

  • SurfaceHolder是控制surface的一个抽象接口,你可以通过SurfaceHolder来控制surface的尺寸和格式,或者修改surface的像素,监视 surface的变化等等,SurfaceHolder是SurfaceView的典型接口。

  • 与直接控制SurfaceView来修改surface不同,使用SurfaceHolder来修改surface时,需要注意lockCanvas() 和Callback.surfaceCreated().这两个方法。

  • SurfaceHolder控制surface的流程所使用的几个方法

SurfaceHolder.Callback

  • SurfaceHolder.Callback是监听surface改变的一个接口

SurfaceView 操作步骤(必要)

  1. 在布局文件中添加 SurfaceView
  2. 在Java代码中找到 SurfaceView
  3. 获取 SurfaceView 的 holder
  4. 使用获取到的 surfaceHolder添加回调函数 addCallback(SurfaceHolder.Callback callback)
  5. 回调函数的三个方法

    public void surfaceCreated(SurfaceHolder holder) SurfaceView界面可见时回调 public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) SurfaceView界面大小、格式改变时回调 public void surfaceDestroyed(SurfaceHolder holder) SurfaceView界面销毁时回调

Camera 操作步骤(必要)

权限:

    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

    <uses-permission android:name="android.permission.CAMERA" />

    <uses-feature android:name="android.hardware.camera" />

  1. Camera.open() 打开摄像头
  2. camera.setPreviewDisplay(holder) 设置预览显示界面
  3. camera.getParametes(); 获取参数处理
  4. 设置必要的参数 //获取屏幕的宽高 WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); Point point = new Point(); display.getSize(point); para.setPictureFormat(256); para.setPictureSize(1280, 960); para.setPreviewSize(960, 720); mCamera.setDisplayOrientation(90); mCamera.setParameters(para); mCamera.startPreview(); mCamera.autoFocus(myaAutoFocusCallback);

  5. myCamera.takePicture(myShutterCallback, null, myJpegCallback); 拍照

  6. myShutterCallback 拍照特效回调:如声音、动画
  7. myJpegCallback PictureCallback mPictureCallback = new PictureCallback()

参考连接  http://www.apkbus.com/blog-7214-53962.html

你可能感兴趣的:(SurfaceView)