开源分享二(Android相机开发实战)
开源分享 一(StickerCamera + 仿微信多图选择)
开源分享三(炫酷的Android Loading动画)
前言
上篇博文给大家分享了两个非常实用的项目功能模块,不知道大伙感觉如何木有一种臭袜子味扑鼻,酸爽的赶脚!!!贱笑贱笑了~ ~
- 调用Camera API 自定义相机
- 调用系统相机
由于需求不同,所以选择的方案固然也不同,至于第二种调用系统相机,这里就不过多讲解了,使用Intent对象设置一个Action动作即可,跳转时使用startActivityForResult,然后在onActivityResult处理相关数据便可,关键代码:
至于使用,较常见的一般是应用中用户上传头像的时候调用,然后返回处理图像数据。
而第一种自定义相机的方式使用也十分普遍,但是要做好这个模块,相对来说还是有一定难度的,之前分享过一个Github上的开源相机的项目,项目由美国的一个团队开发,集 拍照、摄影、各种特效动画 等功能与一身,本人之前研究了下,发现功能比较全面也很强大,抠出来单独拍照那一个模块,我滴妈呀,真TM费劲!相机不管是预览还是拍摄图像都还是很清晰的,自己当时也写了一个,比较操蛋,只能怪自己对这一块的优化了解浅显吧!特别是预览的时候,聚焦完成后,焦点周边会出现很多白色的噪点,密密麻麻,特别严重,头疼的很。不过也总算解决了,灰常感谢USA的那个什么什么团队的开源相机程序。经过自己改造后的预览效果图:
GitHub:https://github.com/xplodwild/android_packages_apps_Focal
相机开发简介
下面说说在Android中调用Camera来定义相机的最基本步骤:
- 打开相机 —— 调用Camera的open()方法。
- 获取拍照参数 —— 调用Camera的getParameters()方法,返回Camera.Parameters对象。
- 拍照参数设置 —— 调用Camera.Parameters对象。
- 拍照参数控制 —— 调用Camera的setParameters(),并将Camera.Parameters对象作为参数传入。注:Android2.3.3之后不用设置。
- 预览取景 —— 调用Camera的startPreview()方法,在之前注意调用Camera的setPreviewDisplay(SurfaceHolder holder)设置使用哪个SurfaceView来显示取得的图片。
- 拍照 —— 调用Camera的takePicture()
- 停止预览 —— 调用Camera的stopPreview()方法
- 资源释放 —— Camera.release()
开启和关闭预览的联系如下:Camera —- SurfaceHolder —— SurfaceView
关于SurfaceHolder.Callback必须实现的3个方法:
surfaceCreated() 该方法在surfaceView被Create时调用
surfaceChanged() 该方法是当surfaceView发生改变后调用
surfaceDestroyed() 这个不用说了,销毁时调用
surfaceHolder通过addCallBack()方法将响应的接口绑定
注:必要Camera权限,例如:
关于Camera下的Parameters类,其中封装了我们需要的大部分功能,下面做个简单介绍:
- setPictureFormat() 方法用于设置相机照片的格式,其参数是一个字符型参数,位于PixelFormat类中,如:PixelFormat.JPEG。
- setSceneMode() 方法用于设置相机场景类型,其参是是一个字符型参数,位于Parameters类中,以SCENE_MODE_开头。
- setZoom() 方法用于设置相机焦距,其参数是一个整型的参数,该参数的范围是0到Camera.getParameters().getMaxZoom()。
- setPictureSize() 方法用于设置相机照片的大小,参数为整型。
- setWhiteBalance() 方法用于设置相机照片白平衡,其参数是一个字符型,位于Parameters类中,以WHITE_BALANCE开头。
- setJpegQuality() 方法用于设置相机照片的质量,其参数是一个整型参数,取值范围为1到100。
- setFlashMode() 方法用于设置闪光灯的类型,其参数是一个字符型参数,位于Parameters类中,以FLASH_MODE_开头。
- setColorEffect() 方法用于设置照片颜色特效的类型,其参数是一个字符型参数,位于Parameters类中,以EFFECT_开头。
本程序模块效果图及示例
下面分享本篇Blog的示例相机模块,此功能模块并非上面开源项目中的剥离出来的,看下效果图咯:
效果看着还可以吧(不点赞也太不给面子了吧 – . – ),下面个出主界面的布局代码:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!