天天看点

做自己的安卓拍照应用,其实很简单

看着自己手机上的自带的拍照APP,感觉人家做的好精美啊,所以就心血来潮的想要做一个自己的安卓拍照app。于是在网上找啊找啊找的终于做出了一款还算能用的拍照设备。 (*^__^*) 嘻嘻……

我主要是借助于SurfaceView类来实现组件的添加的;

然后借助于Camera(导入包的时候记得是引入hardware的);

设置拍照所需的一些参数

实现拍照的回调接口,用以处理回调事件

将摄像头采集到的数据写入本地的文件中

在清单文件中添加摄像机权限,写外部存储卡权限

首先是布局文件,这里因为要显示两个按钮,所以采用了帧布局,并将两个按钮一开始设置为不显示。

然后是清单文件的一些样式(横屏和全屏显示)以及相关的权限的添加

最后是主界面的业务代码的实现:

现在回头来整理一下这个小应用的思路,方便对这些知识点加深印象。

首先是对布局界面的设计的整理:

因为要通过点击按钮的方式来实现拍照和聚焦的效果,还得显示我们的照相机所捕捉到的实时数据,所以我采用了帧布局的形式,让两个按钮显示在SurfaceView的上层,并初始化为不可见的状态。

而实时的界面采用全屏和横屏的方式更为妥当,所以加入下面的代码即可,我这里的全屏带代码中进行设置了。

然后是清单文件的书写:

由于要操作照相机和拍照的图片数据,所以要在清单文件中添加相关的权限。

主界面的代码逻辑:

然后是我们的主界面的代码的逻辑了,在Activity初始化的时候就需要获取SurfaceView控件,然后设置一些参数,比如屏幕常亮,实时无缓冲等,然后添加回调的处理。这里是为了初始化我们的照相机的一些参数,比如设置每秒捕获的图片的帧数,每张图片的大小等等吧。这些都是在SurfaceCreated方法内完成的,也就是那个回调的实现类中完成的。等待着事件返回结果就可以了。最后记得要关闭camera的实例哦,否则其他应用可能就调用不了照相机,进行工作了。

完成了初始化的任务后,我们的界面就算是完成了,现在我们要拍照咯,那必须得按下快门吧,快门就是我们设置好的按钮呗,所以点击屏幕会触发onTouchEvent事件,在这个方法里面我们就设置这两个按钮显示就可以了。左边的是聚焦,右边的是拍照。现在只需要对这两个方法进行实现,就大功告成了。

所以现在就是调用camera的<code>camera.takePicture(null, null, new MyPictureCallback());</code>方法了,前两个是关于压缩,格式等相关,可以设置为null,第三个就是拍照时的一个回调了。其作用就是将照相机捕获到的数据封装起来了,<code>public void onPictureTaken(byte[] data, Camera camera) {</code>这里面的data就是照相机捕获到的图片的字节数组了,我们接下来要做的就是使用一个输出流,将文件写入到一个格式为<code>.jpeg</code> 的图片中,就可以了。

以上就是这个应用的整个的实现的流程和思路。希望对大家能有所帮助。

最后,来个小小的总结和拓展吧。

总结

简易的实现了拍照应用。使用了多个开发过程中常用的知识点和小技巧。

但是代码显得很是混乱,没有分层。应该将不同的业务逻辑实现放到不同的包内,方便代码的管理。

拓展

作为拓展,是我们可以借助这样的代码实现更加美化的效果,比如说添加上一个预览路径,便于查看所拍摄的图片。或者一个摄像的模式,这需要借助于额外的类进行处理。添加上二维码扫描功能等等。

手机型号:魅蓝2

继续阅读