Android技术汇总

android 拍照和自定义简单相机

2018-10-09  本文已影响220人  土肥圆的诺诺

假期过完了,又开始了编码的生活,我国庆假期8天(我公司多放一天)涨了8斤肉,是时候编码消耗下能量了



这次我们讲一点相机的相关小知识,打开相机拍照,并且保存到本地SD卡
我这次将targetSdkVersion 改为了22,避免权限动态申请,需要的同学可以自己加上


权限列表 布局

其实打开相机的代码特别简单就下面一行代码
MediaStore.ACTION_IMAGE_CAPTURE


打开相机

但是好像没啥用,毕竟我们是想拍照保存不是么


好像没啥用
那我们将拍照拿到的数据展示一下,在我们的布局添加一个ImageView,将拍照返回数据返回,我们肯定用startActivityForResult方法
使用startActivityForResult
image.png

你肯定说我擦,怎么拍照图很大,这里怎么这么小,天地良心,因为我们都知道Intent不能传递很大的对象,现在手机拍个图随便好几M,直接给搞死了怎么办,这里返回的其实是缩略图。



只有小孩子才做选择,大人都是我都要,缩略图我要,全图我也要。
好吧,保存图片到本地,我们开始撸代码,首先写出来一个文件路径,6.0以上记得动态权限
图片保存路径

打开相机,输入保存路径



在onActivityResult方法里拿到我们的图片路径

这次就全部显示出来了
效果图
似乎很简单啊,我们百度30s就搞定了吧,好吧,那我们这次自己做一个小相机,毕竟好多美颜相机啥的,我们只求最简单的相机就可以啦,毕竟那些靠的是算法加成
写一个比较low的界面

生成图片路径和查找控件



实现SurfaceView的SurfaceHolder.Callback


打开相机,给surfaceView添加自动对焦



实现SurfaceHolder.Callback的方法,在surfaceCreated绑定相机和surfaceHolder



运行下看看,样子出来了



我们设置拍照的相关参数



对焦成功将图片输出到sd卡跳转到新的页面展示出来

看下效果,图片传递成功


最后是不是发现,怎么图片事横着的,我们明明竖着拍的照片,是以为拍照的时候我们旋转了90度,如果不旋转那么图像一直横着,我们其实可以在我们用来显示图片的view那里也让他旋转90度就好了


我们发现旋转过来了,当然也可以利用Matrix ,但是那个感觉太繁琐了不是么,简单方案能解决问题最好



回头我会写一下,相机录像啊,各种参数配置的文章,敬请期待吧

上一篇 下一篇

猜你喜欢

热点阅读