很多APP可能都会实现此功能:从相机或系统相册选择图片,然后剪裁,上传服务器,当作头像。这时,这个demo就派上用场了。
先看下结果图:
相关权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
首先看下定义变量:
private Uri uritempFile;//剪裁之后的图片存储的路径
private File tempFile;//剪裁之前的原始图片文件
private static final String PHOTO_FILE_NAME = "temp_photo.jpg";//拍照照片的名称
private static final int PHOTO_REQUEST_CAREMA = 1;// 拍照
private static final int PHOTO_REQUEST_GALLERY = 2;// 从相册中选择
private static final int PHOTO_REQUEST_CUT = 3;// 剪裁之后标记
然后首先是从相册选择图片:
/*
* 从相册获取
*/
public void gallery() {
// 激活系统图库,选择一张图片
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, PHOTO_REQUEST_GALLERY);
}
然后是相机拍照:
/*
* 从相机获取
*/
public void camera(View view) {
// 激活相机
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
// 判断存储卡是否可以用,可用进行存储
if (hasSdcard()) {
tempFile = new File(Environment.getExternalStorageDirectory(),
PHOTO_FILE_NAME);
// 从文件中创建uri
Uri uri = Uri.fromFile(tempFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
}
// 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_CAREMA
startActivityForResult(intent, PHOTO_REQUEST_CAREMA);
}
/*
* 判断sdcard是否被挂载
*/
private boolean hasSdcard() {
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
return true;
} else {