在应用软件开发中,图片数据,对于一个公司来说是十分重要的,例如:上传图片资料,修改用户头像等,而这其中就离不开相机和相册的使用。对于ios平台来说,直接调用系统相机或相册,就可搞定一切。然而对于Android平台来说,直接调用系统相机或相册,在适配和体验上问题比较多,具体原因,相比大家也知道,安卓品牌太多太杂,性能不一。鉴于此,在开发的过程中,遇到类似问题,建议自己实现相机或相册功能,以保证体验完整。本篇博文将会重点介绍Camera相机的实现。
首先,推荐两个github项目,可以直接使用的相机和相册;另外,也推荐一个联系人选择器:
一、打开Camera
|
|
二、设置Camera参数
默认尺寸可以自由设置,这里取手机的分辨率为默认尺寸。
1.根据指定分辨率查找相机最佳适配分辨率并设置
|
|
2.根据指定分辨率查找相机最佳预览分辨率并设置
|
|
3.最佳分辨率适配算法(先排序)
|
|
4.对焦模式选择
由于部分智能手机,前置摄像头无对焦模式,对焦参数设置应区分前置摄像头
|
|
5.图片质量
PixelFormat中有多种模式,源码有解。
|
|
6.闪关灯及横竖屏镜头调整
|
|
7.相机异常监听
|
|
完整参数设置代码:
|
|
三、对焦
要实现点击对焦,并有对焦环,需要自定义实现对焦环View.
1.自定义对焦环View-CameraFocusView
核心功能,就是对焦环缩小,并变绿。利用动画改变对焦环半径即可。
2.布局界面
让对焦环自定义View获取整个界面的触摸事件
|
|
3.定义对焦接口
i.定义接口
|
|
ii.对焦环View触摸事件中触发接口:
|
|
4.在CameraSurfaceView实现对焦
i.计算对焦区域
|
|
ii.设置参数进行对焦
|
|
四、拍照
为了图片方便预览,需要对图片进行处理,所以需要知道相机的拍照时的方向,故在拍照应先设置照片的方向参数
1.CameraOrientationDetector(Camera方向监听器)
|
|
2.设置照片方向参数
|
|
3.保存图片
为了方便预览,对不同方向的图片,需要做正向处理。
|
|
五、切换摄像头
|
|
六、打开或关闭闪光灯
|
|
注意事项
- Android6.0以上权限收紧,所以在使用相机前,请用PermissionsModel做好权限判断。具体Android6.0权限
- 部分智能手机,前置摄像头无对焦模式,对焦参数设置应区分前置摄像头
- Android5.0以后,官方推荐使用Camera2,本例子未使用新版本。