转载请注明原创出处,谢谢!
- GitHub: @Ricco
小米note,亲测有效,其他均未测试,请注意!!!
只适用于选择单张图片,例如设置用户头像。
先看效果
弹出选择框.png-
点击Button弹出选择头像对话框。
选择图片.png -
选择一张图片。
剪裁.png - 剪裁图片,设置到ImageView。
核心代码
public class SetActivity extends BaseActivity {
private CircleImageView icon;
String cameraPath;// 拍摄头像照片时SD卡的路径
@Override
protected void initView() {
icon = (CircleImageView) findViewById(R.id.iv_icon);\
}
@Override
protected void initListener() {
findViewById(R.id.btn_icon_set).setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_icon_set:
setAvatar();
break;
default:
}
}
private void setAvatar() {
Intent intent1 = new Intent(Intent.ACTION_PICK);
intent1.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
Intent intent2 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File file = new File(
Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
System.currentTimeMillis() + ".jpg");
cameraPath = file.getAbsolutePath();
Uri uri = Uri.fromFile(file);
intent2.putExtra(MediaStore.EXTRA_OUTPUT, uri);
Intent chooser = Intent.createChooser(intent1, "选择头像");
chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[]{intent2});
startActivityForResult(chooser, 101);// --------------->101
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
try {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == 101) {// 获得未裁剪的照片 --------------->101
String filePath;
if (data != null) {
Uri uri = data.getData();
filePath = uri.getPath();
} else {
// 相机拍照
filePath = cameraPath;
}
crop(filePath)// 裁剪
}
if (requestCode == 102) {// 裁剪点击确定后执行 --------------->102
// 获得了系统截图程序返回的截取后的图片
final Bitmap bitmap = data.getParcelableExtra("data");
// 上传前,要将bitmap保存到SD卡
// 获得保存路径后,再上传
final File file = new File(
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
System.currentTimeMillis() + ".jpg");
OutputStream stream = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
// 上传头像数据并显示头像操作
// showProgressDialog();
// uploading();
// Glide.with(SetActivity.this).load(file.getPath()).into(icon);
// closeProgressDialog();
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
/**
* 调用安卓的图片剪裁程序对用户选择的头像进行剪裁
*
* @param filePath
* 用户选取的头像在SD上的地址
*/
private void crop(String filePath) {
// 隐式intent
Intent intent = new Intent("com.android.camera.action.CROP");
Uri data = Uri.fromFile(new File(filePath));
// 设置剪裁数据 150*150
intent.setDataAndType(data, "image/*");
intent.putExtra("crop", true);
intent.putExtra("return-data", true);
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 150);
intent.putExtra("outputY", 150);
startActivityForResult(intent, 102);// --------------->102
}
}
网友评论