标签:
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()之间)才能让渲染进程访问。
SurfaceHolder是控制surface的一个抽象接口,你可以通过SurfaceHolder来控制surface的尺寸和格式,或者修改surface的像素,监视 surface的变化等等,SurfaceHolder是SurfaceView的典型接口。
与直接控制SurfaceView来修改surface不同,使用SurfaceHolder来修改surface时,需要注意lockCanvas() 和Callback.surfaceCreated().这两个方法。
SurfaceHolder控制surface的流程所使用的几个方法
回调函数的三个方法
public void surfaceCreated(SurfaceHolder holder) SurfaceView界面可见时回调 public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) SurfaceView界面大小、格式改变时回调 public void surfaceDestroyed(SurfaceHolder holder) SurfaceView界面销毁时回调
权限:
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
设置必要的参数 //获取屏幕的宽高 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);
myCamera.takePicture(myShutterCallback, null, myJpegCallback); 拍照
参考连接 http://www.apkbus.com/blog-7214-53962.html
标签:
原文地址:http://www.cnblogs.com/victor-lee/p/4230329.html