Android中簡單實現選擇圖片並裁剪

來源:互聯網
上載者:User

Android中簡單實現選擇圖片並裁剪

在android中選擇圖片是一個很常見的功能,圖片的來源通常情況下是從相機擷取和從相簿擷取兩種。
先來寫一個簡單的選擇按鈕和一個能顯示圖片的ImageView

接下來就是實現的邏輯

    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;        }    }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.