Androidはシステムのアルバムやカメラを呼び出して画像を取得します
9482 ワード
レイアウトはImageViweが1つしかありません
クリックイベントを追加し、onCreateメソッドを省略
画像を取得した後のコールバック方法を以下に書きます.ここではstartActivity ForResultメソッドを使用しています.システムは自動的にonActivity Resultメソッドをコールバックするので、このメソッドで対応する操作を行います.
画像コードの切り取り
画像を切り取った後にstartActivity ForResultメソッドを呼び出し、今回はonActivity Resultメソッドで私たちが画像を設定するメソッドを呼び出します.
<ImageView
android:id="@+id/image_avatar"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
クリックイベントを追加し、onCreateメソッドを省略
//
private final String[] item_list = {" ", " "};
//
private final String IMAGE_TYPE = "image/*";
private final int FROM_GALLERY = 1000;
private final int FROM_CARAMA = 1001;
private final int RESIZE = 1002;
private Bitmap photo;
findViewById(R.id.image_avatar).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showDialog();
}
});
//
private void showDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setItems(item_list, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
switch (i) {
case 0:
getImageFromGalley();
break;
case 1:
getImageFromCamera();
break;
}
}
});
builder.create().show();
}
//
private void getImageFromGalley() {
Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT);
galleryIntent.setType(IMAGE_TYPE);
startActivityForResult(galleryIntent, FROM_GALLERY);
}
//
private void getImageFromCamera() {
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, getCameraImageUri());
startActivityForResult(cameraIntent, FROM_CARAMA);
}
//
private Uri getCameraImageUri() {
String filePath = Environment.getExternalStorageDirectory().getPath();
filePath = filePath + "/" + "avatar.jpg";
return Uri.fromFile(new File(filePath));
}
画像を取得した後のコールバック方法を以下に書きます.ここではstartActivity ForResultメソッドを使用しています.システムは自動的にonActivity Resultメソッドをコールバックするので、このメソッドで対応する操作を行います.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// resultCode RESULT_OK , FROM_GALLERY,FROM_CARAMA,RESIZE ,
if (resultCode != getActivity().RESULT_OK) return;
switch (requestCode) {
case FROM_GALLERY:
//
resizeImage(data.getData(), FROM_GALLERY);
break;
case FROM_CARAMA:
//
resizeImage(getCameraImageUri(), FROM_CARAMA);
break;
case RESIZE:
if (data != null) showResizeImage(data);
break;
default:
toast(" ");
}
}
画像コードの切り取り
private void resizeImage(Uri uri, int requestCode) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, IMAGE_TYPE);
intent.putExtra("crop", "image_true");
//aspectX aspectY
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
//// outputX outputY
intent.putExtra("outputX", 150);
intent.putExtra("outputY", 150);
intent.putExtra("return-data", true);
switch (requestCode) {
case FROM_GALLERY:
// Cursor , uploadFile ,
String[] proj = {MediaStore.Images.Media.DATA};
Cursor mCursor = getActivity().getApplicationContext().getContentResolver().query(uri, proj, null, null, null);
int col_index = 0;
if (mCursor != null) {
col_index = mCursor.getColumnIndex(MediaStore.Images.Media.DATA);
}
mCursor.moveToFirst();
String filePath = mCursor.getString(col_index);
uploadFile = new File(filePath);
mCursor.close();
break;
case FROM_CARAMA:
String filePath_camera = uri.getPath();
uploadFile = new File(filePath_camera);
break;
}
startActivityForResult(intent, RESIZE);
}
画像を切り取った後にstartActivity ForResultメソッドを呼び出し、今回はonActivity Resultメソッドで私たちが画像を設定するメソッドを呼び出します.
private void showResizeImage(Intent data) {
Bundle extras = data.getExtras();
if (extras != null) {
photo = extras.getParcelable("data");
imageAvatar.setImageBitmap(photo);
}
}