android 选择照片(相册/拍照/切图)
2015-11-03 16:31
519 查看
private static final int PHOTO_REQUEST_CAREMA = 0;//相机拍照 private static final int PHOTO_REQUEST_GALLERY = 1;//从相册中选择 private static final int PHOTO_REQUEST_CUT = 2;//剪切结果结果 private static final String PHOTO_FILE_NAME = "zhuangxiaomi_head.jpg"; private File headPhotoFile;
<pre name="code" class="java"> /**从相册中获取*/ private void gallery(){ // 激活系统图库,选择一张图片 Intent intent = new Intent(Intent.ACTION_PICK); intent.setType("image/*"); // 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_GALLERY startActivityForResult(intent, PHOTO_REQUEST_GALLERY); } /**从相机获取*/ public void camera() { // 激活相机 Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); // 判断存储卡是否可以用,可用进行存储 if (hasSdcard()) { headPhotoFile = new File(Environment.getExternalStorageDirectory(),PHOTO_FILE_NAME); // 从文件中创建uri Uri uri = Uri.fromFile(headPhotoFile); intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); } // 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_CAREMA startActivityForResult(intent, PHOTO_REQUEST_CAREMA); } /**剪切图片*/ private void crop(Uri uri) { // 裁剪图片意图 Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); intent.putExtra("crop", "true"); // 裁剪框的比例,1:1 intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); // 裁剪后输出图片的尺寸大小 intent.putExtra("outputX", 250); intent.putExtra("outputY", 250); intent.putExtra("outputFormat", "JPEG");// 图片格式 intent.putExtra("noFaceDetection", true);// 取消人脸识别 intent.putExtra("return-data", true); // 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_CUT startActivityForResult(intent, PHOTO_REQUEST_CUT); } /**判断sdcard是否被挂载*/ private boolean hasSdcard() { if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { return true; } else { return false; } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == PHOTO_REQUEST_GALLERY) {/**从相册返回的数据*/ if (data != null) { // 得到图片的全路径 Uri uri = data.getData(); crop(uri); } } else if (requestCode == PHOTO_REQUEST_CAREMA) {/**从相机返回的数据*/ if (hasSdcard()) { crop(Uri.fromFile(headPhotoFile)); } else { makeToast("未找到存储卡,无法存储照片!"); } } else if (requestCode == PHOTO_REQUEST_CUT) {/**从剪切图片返回的数据*/ if (data != null) { Bitmap bitmap = data.getParcelableExtra("data"); // this.headImage.setImageBitmap(bitmap);//显示剪切后的图片 byte[] b = BitmapUtil.getImageBytes(bitmap);/**压缩图片*/ String s = Base64.encodeToString(b, Base64.NO_WRAP); // submitHead(s); } try { // 将临时文件删除 headPhotoFile.delete(); } catch (Exception e) { e.printStackTrace(); } } super.onActivityResult(requestCode, resultCode, data); }
<pre name="code" class="java">/**选择框*/ private void showDialog(){ AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setItems(new String[]{getString(R.string.profile_account_setting_photos), getString(R.string.profile_account_setting_select_pic)}, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { switch (which){ case PHOTO_REQUEST_CAREMA: camera(); break; case PHOTO_REQUEST_GALLERY: gallery(); break; } } }); builder.show(); }
相关文章推荐
- 我的记事本项目之路(四)
- 彻底解决Android 拍照 内存溢出 Out of Memory的问题
- 安卓学习教程总结:芯灵思开发板安卓底层开发
- Android序列化:Serializable和Parcelable详解
- Android 手势水平监听判断
- Android中shape的使用
- 安卓学习经验总结:芯灵思开发板安卓底层开发
- android 生成二维码(带图片&不带图片)
- 收集android上开源的酷炫的交互动画和视觉效果:Interactive-animation
- Android修改ActionBar背景颜色和标题,菜单颜色 (清晰)
- Android Studio创建Genymotion模拟器失败解决办法 win10
- android中布局文件中 layout_weight 的属性详解
- Android仿快递物流时间轴的代码实现
- Android捕获全局异常
- Android捕获全局异常
- Android编程实现3D滑动旋转效果的方法
- 动态添加布局(个人觉得还算不错,查了很多资料,网上没有我要的,所以写出来)
- 我的记事本项目之路(三)
- Android 联系人A-Z列表布局实现分析。
- 刷新头的升级版,仿QQ的红色消息小球