在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(                                                MediaStore.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. Android基于tess-two的离线身份证等图片文字识别
  2. Android把Bitmap保存为bmp图片
  3. android中处理图片成圆角
  4. android 保存图片到本地系统相册
  5. 转:android 图片叠加效果——两种方法
  6. android EditText实例 删除按钮 与内容监听
  7. android 通过 名称获取图片
  8. Android使用线程获取网络图片的方法

随机推荐

  1. android 地理位置共享服务
  2. 《Android面试宝典》学习笔记(第四章:对话
  3. Android 给贪吃蛇游戏加背景音乐
  4. Android:adb常用命令汇总
  5. 下载adt-bundle-linux-x86_64-20140702.z
  6. g1安装android软件详细攻略
  7. Android的多媒体技术――MediaPlayer实现
  8. android中进行https连接的方式的详解
  9. Android TextView中显示单行过长的用...
  10. Android消息机制不完全解析(上)