操蛋的Camera V2
2016-07-26 20:25
417 查看
操蛋的Camera V2
时代的更替,带来的却是科技的不断进步
在android 5以后创建相机要比在android 5以前要繁琐的多,但对于我们这群懒惰的人不可能让自己的工作变得繁琐除非在技术上有更加的进步,
是的没错,在API 21后我们对创建相机和摄像头的控制变得更加多了,虽然变得复杂了,但是技术是可以掌握的而控制是先天的,在等价的替换下我们得到了更多的对摄像头的控制。
想自己做个照相机玩的(装逼的)可以看看我的指南:
(0):定义显示镜头的TextureView
(1):打开摄像头:
(2):实现上面openCamera()方法中的stateCallbace; (这是一个回调机制)
(3):在onOpend()中2的位置创建预览
(4):在上面代码中有个getSurface()方法
时代的更替,带来的却是科技的不断进步
在android 5以后创建相机要比在android 5以前要繁琐的多,但对于我们这群懒惰的人不可能让自己的工作变得繁琐除非在技术上有更加的进步,
是的没错,在API 21后我们对创建相机和摄像头的控制变得更加多了,虽然变得复杂了,但是技术是可以掌握的而控制是先天的,在等价的替换下我们得到了更多的对摄像头的控制。
想自己做个照相机玩的(装逼的)可以看看我的指南:
(0):定义显示镜头的TextureView
// 创建textureView textureView = (TextureView) findViewById(R.id.textureView); textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() { @Override public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {//TextureView准备好后触发 openCamera(); } @Override public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) { } @Override public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { return false; } @Override public void onSurfaceTextureUpdated(SurfaceTexture surface) { } });
(1):打开摄像头:
// 定义摄像头管理器 cameraManager = (CameraManager) getSystemService(CAMERA_SERVICE); // 通过管理器打开摄像头 try { cameraManager.openCamera("0", stateCallbace, null); } catch (CameraAccessException e) { e.printStackTrace(); }
(2):实现上面openCamera()方法中的stateCallbace; (这是一个回调机制)
// 实现打开摄像头后的回调机制 private CameraDevice.StateCallback stateCallbace = new CameraDevice.StateCallback() { @Override public void onOpened(final CameraDevice camera) { //摄像头打开时激发 // (2) } @Override public void onDisconnected(CameraDevice camera) { //摄像头断开时激发 } @Override public void onError(CameraDevice camera, int error) { //打开摄像头出错时激发 } };
(3):在onOpend()中2的位置创建预览
// 在此实现预览机制 try { captureRequestBuilder = camera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);//中间参数代表预览 // 设置显示预览的Suface getSurface();// 3 // 设置预览显示 captureRequestBuilder.addTarget(surface); // 设置预览请求 camera.createCaptureSession(Arrays.asList(surface), new CameraCaptureSession.StateCallback() { @Override public void onConfigured(CameraCaptureSession session) { if (camera==null) { return; } // 设置预览模式 // 自动聚焦 captureRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE); // 自动曝光 captureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH); // CaptureRequest捕获预览参数 CaptureRequest.Builder获得参数 captureRequest = captureRequestBuilder.build(); try { // 开始预览 session.setRepeatingRequest(captureRequest, null,null); } catch (CameraAccessException e) { e.printStackTrace(); }
(4):在上面代码中有个getSurface()方法
public void getSurface() { SurfaceTexture surfaceTexture = textureView.getSurfaceTexture(); surface = new Surface(surfaceTexture); }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories