假期过完了,又开始了编码的生活,我国庆假期8天(我公司多放一天)涨了8斤肉,是时候编码消耗下能量了
![](https://img.haomeiwen.com/i2657154/6c311c61b4dc0fd9.png)
这次我们讲一点相机的相关小知识,打开相机拍照,并且保存到本地SD卡
我这次将targetSdkVersion 改为了22,避免权限动态申请,需要的同学可以自己加上
![](https://img.haomeiwen.com/i2657154/34aef4e638d0a3be.png)
![](https://img.haomeiwen.com/i2657154/456c8567977dbd0e.png)
其实打开相机的代码特别简单就下面一行代码
MediaStore.ACTION_IMAGE_CAPTURE
![](https://img.haomeiwen.com/i2657154/55b2fa561921a7df.png)
但是好像没啥用,毕竟我们是想拍照保存不是么
![](https://img.haomeiwen.com/i2657154/6cca9f0e4b93a561.png)
那我们将拍照拿到的数据展示一下,在我们的布局添加一个ImageView,将拍照返回数据返回,我们肯定用startActivityForResult方法
![](https://img.haomeiwen.com/i2657154/2c48e3fac613fc7b.png)
![](https://img.haomeiwen.com/i2657154/282bc329e4091260.png)
![](https://img.haomeiwen.com/i2657154/dc18655cbdc9fea1.png)
![](https://img.haomeiwen.com/i2657154/96286ebde835d503.png)
你肯定说我擦,怎么拍照图很大,这里怎么这么小,天地良心,因为我们都知道Intent不能传递很大的对象,现在手机拍个图随便好几M,直接给搞死了怎么办,这里返回的其实是缩略图。
![](https://img.haomeiwen.com/i2657154/149c35081730239c.png)
只有小孩子才做选择,大人都是我都要,缩略图我要,全图我也要。
好吧,保存图片到本地,我们开始撸代码,首先写出来一个文件路径,6.0以上记得动态权限
![](https://img.haomeiwen.com/i2657154/3a504aa9510a4170.png)
打开相机,输入保存路径
![](https://img.haomeiwen.com/i2657154/54befdb1313edbd0.png)
在onActivityResult方法里拿到我们的图片路径
![](https://img.haomeiwen.com/i2657154/b3e8fec8b49a0200.png)
这次就全部显示出来了
![](https://img.haomeiwen.com/i2657154/b119558e1a6d5df6.png)
似乎很简单啊,我们百度30s就搞定了吧,好吧,那我们这次自己做一个小相机,毕竟好多美颜相机啥的,我们只求最简单的相机就可以啦,毕竟那些靠的是算法加成
写一个比较low的界面
![](https://img.haomeiwen.com/i2657154/4c5dfc2122dc4af0.png)
生成图片路径和查找控件
![](https://img.haomeiwen.com/i2657154/77e51798ddd5cda3.png)
实现SurfaceView的SurfaceHolder.Callback
![](https://img.haomeiwen.com/i2657154/4945025c40fae382.png)
打开相机,给surfaceView添加自动对焦
![](https://img.haomeiwen.com/i2657154/5bf11ff0ff6c12df.png)
实现SurfaceHolder.Callback的方法,在surfaceCreated绑定相机和surfaceHolder
![](https://img.haomeiwen.com/i2657154/31b508c966996e04.png)
![](https://img.haomeiwen.com/i2657154/8d11985f9b61eb94.png)
运行下看看,样子出来了
![](https://img.haomeiwen.com/i2657154/40f4ce4ea48d43b9.png)
我们设置拍照的相关参数
![](https://img.haomeiwen.com/i2657154/af5e9564817e69f6.png)
对焦成功将图片输出到sd卡跳转到新的页面展示出来
![](https://img.haomeiwen.com/i2657154/457454230ff312f7.png)
看下效果,图片传递成功
![](https://img.haomeiwen.com/i2657154/06743f3038a5e82f.png)
最后是不是发现,怎么图片事横着的,我们明明竖着拍的照片,是以为拍照的时候我们旋转了90度,如果不旋转那么图像一直横着,我们其实可以在我们用来显示图片的view那里也让他旋转90度就好了
![](https://img.haomeiwen.com/i2657154/bebcfe25cdd26e54.png)
![](https://img.haomeiwen.com/i2657154/c81b6d7091a61975.png)
我们发现旋转过来了,当然也可以利用Matrix ,但是那个感觉太繁琐了不是么,简单方案能解决问题最好
![](https://img.haomeiwen.com/i2657154/1e659284f63845de.png)
回头我会写一下,相机录像啊,各种参数配置的文章,敬请期待吧
网友评论