Android中简单实现选择图片并裁剪
在android中选择图片是一个很常见的功能,图片的来源通常情况下是从相机获取和从相册获取两种。
先来写一个简单的选择按钮和一个能显示图片的ImageView
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/bt_picture"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="获取图片" />
<ImageView
android:id="@+id/picture"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" />
</LinearLayout>
接下来就是实现的逻辑
private String[] takePhotoitems;// 获取照片的操纵选项
public static final int TAKE_PHOTO = 1;
public static final int CROP_PHOTO = 2;
private Button getPicture;
private ImageView picture;
private Uri imageUri;
设置按钮的点击事件
@Override
public void onClick(View v) {
takePhotoitems = new String[] { "选择本地图片", "拍照" };
imageUri = getImageUri();
new AlertDialog.Builder(this)
.setTitle("设置头像")
.setItems(takePhotoitems,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
switch (which) {
case 0:
getImageUri();
Intent intent = new Intent(
Intent.ACTION_GET_CONTENT);
intent.setDataAndType(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
"image/*");
intent.setType("image/*");
intent.putExtra("crop", "true");
intent.putExtra("scale", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT,
imageUri);
startActivityForResult(intent, CROP_PHOTO);
break;
case 1:
// 拍照
getImageUri();
if (isHasSdcard()) {
Intent takePhotoIntent = new Intent(
"android.media.action.IMAGE_CAPTURE");
takePhotoIntent.putExtra(
MediaStore.EXTRA_OUTPUT,
imageUri);
startActivityForResult(takePhotoIntent,
TAKE_PHOTO);
} else {
Toast.makeText(MainActivity.this,
"未检测到sd卡", Toast.LENGTH_LONG)
.show();
}
break;
}
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).show();
}
用到的两个工具方法
/**
* 获取图片的路径
*/
private Uri getImageUri() {
File outputImage = new File(Environment.getExternalStorageDirectory(),
"tempImage.jpg");
if (outputImage.exists()) {
outputImage.delete();
}
try {
outputImage.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
return Uri.fromFile(outputImage);
};
/**
* 判断sd卡是否存在
*/
public static boolean isHasSdcard() {
String state = Environment.getExternalStorageState();
if (state.equals(Environment.MEDIA_MOUNTED)) {
return true;
} else {
return false;
}
}
获取到图片后进行裁剪
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case TAKE_PHOTO:
if (resultCode == RESULT_OK) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(imageUri, "image/*");
intent.putExtra("scale", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, CROP_PHOTO);
}
break;
case CROP_PHOTO:
if (resultCode == RESULT_OK) {
try {
Bitmap bitmap = BitmapFactory
.decodeStream(getContentResolver().openInputStream(
imageUri));
picture.setImageBitmap(bitmap);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
break;
default:
break;
}
}
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。