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 ,但是那个感觉太繁琐了不是么,简单方案能解决问题最好
回头我会写一下,相机录像啊,各种参数配置的文章,敬请期待吧