您的位置:首页 > 移动开发 > Android开发

操蛋的Camera V2

2016-07-26 20:25 417 查看
操蛋的Camera V2
时代的更替,带来的却是科技的不断进步
在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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android Camera camera v2