使用之前一定要先获取拍照和文件存储权限。
在根目录的buid.gradle文件中添加
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
然后在使用的module的buid.gradle中添加
implementation 'com.github.sdwwld:CameraX:1.1.5'
使用方式很简单,几行代码即可
new CameraParam.Builder()
.setActivity(this)
.build();
当然如果不能满足你的需求,还可以修改更多的属性
String cameraPath = Environment.getExternalStorageDirectory().getPath() + File.separator + "DCIM" + File.separator + "Camera";
File cameraFolder = new File(cameraPath);
if (!cameraFolder.exists()) {
cameraFolder.mkdirs();
}
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd_HHmmss");
CameraParam mCameraParam =
new CameraParam.Builder()
.setActivity(this)//!!!参数必须要有
.setFront(false)//是否是前置摄像头,true是前置摄像头,false是后置摄像头
.setShowMask(true)//是否显示裁剪区,如果显示,图片会进行裁剪
.setShowSwitch(true)//是否显示摄像头切换按钮,如果显示,可以点击切换前后摄像头
.setSwitchLeft(Tools.dp2px(this, 40))//摄像头切换按钮到屏幕左边的距离
.setSwitchTop(Tools.dp2px(this, 40))//摄像头切换按钮到屏幕上边的距离
.setSwitchSize(Tools.dp2px(this, 40))//摄像头切换按钮的大小(宽高一样,是正方形的)
.setBackText("返回")//下面返回键显示的文字
.setBackColor(Color.WHITE)//下面返回键的颜色
.setBackSize(16)//下面返回键的尺寸
.setBackLeft(Tools.dp2px(this, 10))//返回键到屏幕左边的距离
.setTakePhotoSize(Tools.dp2px(this, 60))//拍照按钮的大小(还有拍照完之后显示的保存和放弃保存的按钮,这3个按钮的大小是一样的)
.setMaskMarginLeftAndRight(Tools.dp2px(this, 20))//如果显示裁剪框,裁剪框左右两边倒屏幕的距离
.setMaskMarginTop(Tools.dp2px(this, 120))////如果显示裁剪框,裁剪框到屏幕上边的距离
.setMaskRatioW(8)//下面一行和当前行表示的是裁剪框的宽高比
.setMaskRatioH(5)
.setResultBottom(Tools.dp2px(this, 60))//拍照按钮到屏幕下边的距离(还有拍照完之后显示的保存和放弃保存的按钮)
.setResultLeftAndRight(Tools.dp2px(this, 60))//拍照完之后显示的保存和放弃保存的按钮到左边和右边的距离
.setSwitchImgId(R.drawable.ic_switch)//切换摄像头的按钮
.setMaskImgId(R.drawable.bg_bankcard)//剪切框
.setSaveImgId(R.mipmap.success)//拍照成功之后的保存按钮
.setCancelImgId(R.mipmap.failed)//拍照成功之后的放弃按钮
.setTakePhotoImgId(R.mipmap.take_button)//拍照按钮
.setPicturePath(cameraFolder.getAbsolutePath() + File.separator + "IMG_" + simpleDateFormat.format(new Date()) + ".jpg")//拍照保存的路径
.setShowFocusTips(true)//点击屏幕聚焦成功的时候是否需要提示
.setFocusFailTips("聚焦失败")//聚焦失败的提示
.setFocusSuccessTips("聚焦成功")//聚焦成功的提示
.setFocusViewTime(3)//聚焦的时间,是秒
.setFocusViewColor(ContextCompat.getColor(this, R.color.blue))//聚焦框的颜色
.setFocusViewSize(Tools.dp2px(this, 60))//聚焦框的大小(正方形的)
.setCornerViewSize(Tools.dp2px(this, 12))//聚焦框的圆角大小
.setFocusViewStrokeSize(Tools.dp2px(this, 2))//聚焦框线条宽度
.setRequestCode(CameraConstant.REQUEST_CODE)//请求码
.build();
//第一个参数是必须要有的,后面的参数不是必须的,如果想获取默认参数可以像下面这样
Log.d("wld______", mCameraParam.getPicturePath());
获取拍照后的文件路径
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//requestCode默认是CameraConstant.REQUEST_CODE ,当然也可以在上面的CameraParam创建的时候
//调用setRequestCode修改
if (requestCode == CameraConstant.REQUEST_CODE && resultCode == RESULT_OK) {
//获取图片路径
String picturePath = data.getStringExtra(CameraConstant.PICTURE_PATH_KEY);
//显示出来
img_picture.setVisibility(View.VISIBLE);
img_picture.setImageBitmap(BitmapFactory.decodeFile(picturePath));
}
}
如果大家喜欢算法题还可以关注我的微信公众号“数据结构和算法”,目前已经写了有500多道算法题了,大家可以一起来学习