如果你是在fragment里头调用的拍照,出了bug 可以查看 这篇文章 点我 不懂的可以留言。
这篇博客对于7.0的版本的修改。主要是在文件存储的处理。
6.0、8.0版本使用本文的存储文件会出现 java.io.FileNotFoundException: No such file or directory 找不到文件夹
至于怎么做版本适配大家可以度娘一下,我这个问题往后我处理好放在博客给大家看看还有什么不足的,还请指点。
本次修改的地方是使用了第三方的截图开源框架 uCrop,解决了一些机型剪辑图片时gg了。原因一个就是,Android自带的截图有点坑啊(应该是我用不好的原因)毕竟别人的框架也是基于系统的所提供嘛。
这边先说明一下uCrop的使用,再往下看就是拍照功能的实现
1、添加依赖走起 -->app.gradle
implementation 'com.yalantis:ucrop:1.4.1'
-->build.gradle (Project)
allprojects {
repositories {
google()
jcenter()
maven { url "https://jitpack.io" } //添加的是这句
}
}
2、申请activity,这个并不是说你自己去创建一个,你看清楚他的包名,uCrop是作者的喔。
<activity android:name="com.yalantis.ucrop.UCropActivity" android:screenOrientation="portrait" android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>
3、开搞啦。这里直接使用代码就可以,截图跳转到UCropActivity
UCrop uCrop = UCrop.of(uri, cropUri); //第一参数是处理图片你的文件的路径,第二个参数就是存放剪辑后的路径 UCrop.Options options = new UCrop.Options(); //设置裁剪图片可操作的手势 options.setAllowedGestures(UCropActivity.SCALE, UCropActivity.ROTATE, UCropActivity.ALL); //是否隐藏底部容器,默认显示 options.setHideBottomControls(true); //设置toolbar颜色 options.setToolbarColor(ActivityCompat.getColor(activity, R.color.colorPrimary)); //设置状态栏颜色 options.setStatusBarColor(ActivityCompat.getColor(activity, R.color.colorPrimary)); // //是否能调整裁剪框 // options.setShowCropFrame(true); options.setCompressionFormat(Bitmap.CompressFormat.JPEG); //UCrop配置 //设置裁剪图片的宽高比,比如1:1 你自己随意 uCrop.withAspectRatio(1, 1); uCrop.withMaxResultSize(250,250); uCrop.withOptions(options); //uCrop.useSourceImageAspectRatio(); //跳转裁剪页面 uCrop.start(getContext(),this,CODE_RESULT_REQUEST); //start 方法中提供几种方式 也就是说你在fragment、activity 都可