简单实现拍照或者从相册中选取并且剪裁

来源:互联网 发布:柯南主线 知乎 编辑:程序博客网 时间:2024/05/16 13:54

每个项目都少不了拍照这个功能,因为你要让用户自己的设置头像
直接上代码

public class MainActivity extends AppCompatActivity{    private Uri imageUri;    private ImageView image;    private String path;    @Override    protected void onCreate (Bundle savedInstanceState){        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        image = (ImageView) findViewById(R.id.ima);    }    public void phone (View viw){        File outputImage = new File(Environment.getExternalStorageDirectory(), "output_image.jpg");        try{            if(outputImage.exists()){                outputImage.delete();            }            outputImage.createNewFile();        }catch(IOException e){            e.printStackTrace();        }        if(Build.VERSION.SDK_INT >= 24){            imageUri = FileProvider.getUriForFile(MainActivity.this, "com", outputImage);        }else{            imageUri = Uri.fromFile(outputImage);        }        Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);        startActivityForResult(intent, 1);    }    public void phone1 (View view){        chooseFromGallery();    }    /**     * 从相册选择图片     */    private void chooseFromGallery (){        //构建一个内容选择的Intent        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);        //设置选择类型为图片类型        intent.setType("image/*");        //打开图片选择        startActivityForResult(intent, 2);    }    @RequiresApi(api = Build.VERSION_CODES.KITKAT)    @Override    protected void onActivityResult (int requestCode, int resultCode, Intent data){        switch(requestCode){            case 1:                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, 3);                }                break;            case 2:                if(data == null){                    return;                }else{                    //用户从图库选择图片后会返回所选图片的Uri                    //获取到用户所选图片的Uri                    imageUri = data.getData();                    //返回的Uri为content类型的Uri,不能进行复制等操作,需要转换为文件Uri                    // uri = convertUri(uri);                    //startImageZoom(uri);                    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, 4);                }                break;            case 3:                try{                    Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));                    path = imageUri.getPath();                    image.setImageBitmap(bitmap);                }catch(FileNotFoundException e){                    e.printStackTrace();                }                break;            case 4:                try{                    Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));                    image.setImageBitmap(bitmap);                }catch(FileNotFoundException e){                    e.printStackTrace();                }                //获取绝对路径                if(DocumentsContract.isDocumentUri(this, imageUri)){                    String docId = DocumentsContract.getDocumentId(imageUri);                    if("com.android.providers.media.documents".equals(imageUri.getAuthority())){                        String id = docId.split(":")[1];                        String selection = MediaStore.Images.Media._ID + "=" + id;                        path = getImagePath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, selection);                    }else if("com.android.providers.downloads.documents".equals(imageUri.getAuthority())){                        Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(docId));                        path = getImagePath(contentUri, null);                    }else if("content".equalsIgnoreCase(imageUri.getScheme())){                        path = imageUri.getPath();                    }else if("file".equalsIgnoreCase(imageUri.getScheme())){                        path = imageUri.getPath();                    }else{                    }                }else{                    path = getImagePath(imageUri, null);                }                break;        }    }    private String getImagePath (Uri uri, String selection){        String path = null;        Cursor cursor = getContentResolver().query(uri, null, selection, null, null);        if(cursor != null){            if(cursor.moveToFirst()){                path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));            }            cursor.close();        }        return path;    }}

不要忘了添加权限

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
0 0
原创粉丝点击