【基础笔记】Android Studio拍照、选择相册(第三方框
2020-02-28 本文已影响0人
究极无敌棒棒糖
一、选择相册(FilePicker)
1、导入依赖
implementation 'cn.imlibo:FilePicker:v0.0.5_alpha'
2、使用方法
①选择指定后缀文件
FilePicker
.from(this)
.chooseForMimeType()//选择指定后缀文件
.setMaxCount(10)
.setFileTypes("png", "doc","apk", "mp3", "gif", "txt", "mp4", "zip")
.requestCode(REQUEST_CODE_CHOOSE)//确认码
.start();
②在图片选择器中选择图片或视频
FilePicker
.from(this)
.chooseMedia()//图片选择器
.enabledCapture(true)
.setTheme(R.style.FilePicker_Dracula)
.requestCode(REQUEST_CODE_CHOOSE)
.start();
③接受返回的文件
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != RESULT_OK) {
return;
}
if (requestCode == REQUEST_CODE_CHOOSE) {
ArrayList<EssFile> essFileList = data.getParcelableArrayListExtra(Const.EXTRA_RESULT_SELECTION);
StringBuilder builder = new StringBuilder();
for (EssFile file :
essFileList) {
builder.append(file.getMimeType()).append(" | ").append(file.getName()).append("\n\n");
}
textView.setText(builder.toString());//显示选取结果
//setViewText(builder.toString(), pathName);通常上传的时候需要文件路径,新写一个方法保存文件路径
}
}
3、Git地址
二、拍照(TakePhoto)
①、添加依赖
repositories {
//glide
mavenCentral()
google()
}
dependencies {
.....
implementation 'com.jph.takephoto:takephoto_library:4.0.3'
//Glide图片显示
implementation 'com.github.bumptech.glide:glide:4.9.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
}
②、Activity实现takephoto
/**
* 实现Takephoto,InvokeListener。重写多个方法,添加获取实例方法getPhoto,对图片进行压缩裁剪等操作。
*/
public class GetPicture extends AppCompatActivity implements TakePhoto.TakeResultListener, InvokeListener {
@BindView(R.id.iv_choose)
ImageView ivChoose;
@BindView(R.id.btn_photo)
Button btnPhoto;
@BindView(R.id.btn_picture)
Button btnPicture;
@BindView(R.id.btn_multiple_choice)
Button btnMultipleChoice;
@BindView(R.id.iv_choose2)
ImageView ivChoose2;
private TakePhoto takePhoto;
private InvokeParam invokeParam;
ArrayList<TImage> images;//返回的图片对象
private int flag;//1-->打开相机(裁剪),2-->打开相册(裁剪),3-->打开相册(多选裁剪)
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
getTakePhoto().onCreate(savedInstanceState);
super.onCreate(savedInstanceState);
setContentView(R.layout.get_picture);
ButterKnife.bind(this);
}
/**
* 获取TakePhoto实例
*
* @return
*/
public TakePhoto getTakePhoto() {
if (takePhoto == null) {
takePhoto = (TakePhoto) TakePhotoInvocationHandler.of(this).bind(new TakePhotoImpl(this, this));
}
//设置压缩规则,最大500kb
takePhoto.onEnableCompress(new CompressConfig.Builder().setMaxSize(500 * 1024).create(), true);
return takePhoto;
}
/**
* 拍照,选取照片等操作
*/
private void takePhotoAndImage() {
//图片保存路径
File file = new File(getExternalCacheDir(), System.currentTimeMillis() + ".png");
Uri uri = Uri.fromFile(file);
//图片裁剪方式
int size = Math.min(getResources().getDisplayMetrics().widthPixels, getResources().getDisplayMetrics().heightPixels);
CropOptions cropOptions = new CropOptions.Builder().setOutputX(size).setOutputX(size).setWithOwnCrop(false).create();
if (flag == 1) {
//相机获取照片并剪裁
takePhoto.onPickFromCaptureWithCrop(uri, cropOptions);
//相机获取不剪裁
//takePhoto.onPickFromCapture(uri);
} else if (flag == 2) {
//相册获取照片并剪裁
takePhoto.onPickFromGalleryWithCrop(uri, cropOptions);
//相册获取不剪裁
// takePhoto.onPickFromGallery();
} else if (flag == 3) {
//多选,并剪裁
// takePhoto.onPickMultipleWithCrop(3, cropOptions);
//多选,不剪裁
takePhoto.onPickMultiple(2);
}
}
/**
* 显示图片
*/
private void showImg() {
for (int i = 0, j = images.size(); i < j - 1; i += 2) {
Glide.with(this).load(new File(images.get(i).getCompressPath())).into(ivChoose);
Glide.with(this).load(new File(images.get(i + 1).getCompressPath())).into(ivChoose2);
}
if (images.size() % 2 == 1) {
Glide.with(this).load(new File(images.get(images.size() - 1).getCompressPath())).into(ivChoose);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
getTakePhoto().onActivityResult(requestCode, resultCode, data);
super.onActivityResult(requestCode, resultCode, data);
}
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
getTakePhoto().onSaveInstanceState(outState);
super.onSaveInstanceState(outState, outPersistentState);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
PermissionManager.TPermissionType type = PermissionManager.onRequestPermissionsResult(requestCode, permissions, grantResults);
PermissionManager.handlePermissionsResult(this, type, invokeParam, this);
}
@Override
public void takeSuccess(TResult result) {
images = result.getImages();
showImg();
}
@Override
public void takeFail(TResult result, String msg) {
Toast.makeText(CallPhone.this,"获取图片失败",Toast.LENGTH_SHORT).show();
}
@Override
public void takeCancel() {
Toast.makeText(CallPhone.this, "用户取消操作", Toast.LENGTH_SHORT).show();
}
@Override
public PermissionManager.TPermissionType invoke(InvokeParam invokeParam) {
PermissionManager.TPermissionType type = PermissionManager.checkPermission(TContextWrap.of(this), invokeParam.getMethod());
if (PermissionManager.TPermissionType.WAIT.equals(type)) {
this.invokeParam = invokeParam;
}
return type;
}
@OnClick({R.id.btn_photo, R.id.btn_picture, R.id.btn_multiple_choice})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.btn_photo:
flag = 1;
takePhotoAndImage();
break;
case R.id.btn_picture:
flag = 2;
takePhotoAndImage();
break;
case R.id.btn_multiple_choice:
flag = 3;
takePhotoAndImage();
break;
}
}
}
③实例图片
选取前 选取时选取加载后
④Git地址