Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android中簡單實現選擇圖片並裁剪

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

編輯:關於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;
        }
    }
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved