Android项目开发之头像上传
来源:互联网 发布:精简版apk软件 编辑:程序博客网 时间:2024/05/23 00:07
在android项目开发中往往会又有用户头像的存在并需要提供上传头像功能,总结了一下,所需头像图片的来源有两种,一是相机CAMEAR,而是相册ALBUM,然后后台我们得到照片后可能还需要裁剪照片,选择所需部分进行裁剪,最后显示头像并上传头像,下面我们一步一步的为大家讲解。
一、调用系统相机进行拍照
/** * 调用系统相机拍照 */ private void setectedFromCamera() { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent,CAMERA_REQUEST_CODE); }
二、调用系统相册选择图片
/** * 调用相册选择图片 */ private void setectedFromAlbum() { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("image/*"); startActivityForResult(intent,ALBUM_REQUEST_CODE); }
三、activity中重写回调方法onActivityResult
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode==CAMERA_REQUEST_CODE){//调用系统相机返回 if(data==null){ return; }else{ Bundle extras = data.getExtras(); if(extras!=null){ Bitmap bitamp = extras.getParcelable("data"); //ivavatar.setImageBitmap(bitamp); Uri uri = saveBitmap(bitamp); startImageZoom(uri); } } }else if(requestCode==ALBUM_REQUEST_CODE){//调用相册返回 if(data==null){ return; } Uri uri; uri = data.getData(); Uri fileUri = convertUri(uri); startImageZoom(fileUri); }else if(requestCode==CROP_REQUEST_CODE){//调用图片裁剪返回 if(data==null){ return; } Bundle extras = data.getExtras(); if(extras!=null){ Bitmap bitmap = extras.getParcelable("data"); Uri uri = saveBitmap(bitmap); Log.d("SysPhotoActivity", uri.getPath()); // x.image().bind(ivavatar,uri.getPath()+"",options); ivavatar.setImageBitmap(bitmap); } } }
四、图片裁剪、uri转换,以及图片保存的重要方法
/** * 图片裁剪 * @param uri */ private void startImageZoom(Uri uri){ Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri,"image/*"); intent.putExtra("crop", "true");//设置可裁剪 intent.putExtra("aspectX", 1);//裁剪比例 intent.putExtra("aspectY", 1); intent.putExtra("outputX", 150);//裁剪后尺寸 intent.putExtra("outputY", 150); intent.putExtra("return-data", true);//设置数据返回值的形式 startActivityForResult(intent,CROP_REQUEST_CODE); }
/** * uri转换(content://>>file://) * @param uri * @return */ private Uri convertUri(Uri uri){ InputStream is = null; try { is = getContentResolver().openInputStream(uri); Bitmap bitmap = BitmapFactory.decodeStream(is); is.close(); return saveBitmap(bitmap); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } /** * 保存图片并返回uri(file://) * @param bitmap * @return */ private Uri saveBitmap(Bitmap bitmap){ File tmDir = new File(Environment.getExternalStorageDirectory()+"/kaba/avatar/"); if(!tmDir.exists()){ tmDir.mkdir(); } File img = new File(tmDir.getAbsolutePath()+"avatar.png"); try { FileOutputStream fos = new FileOutputStream(img); bitmap.compress(Bitmap.CompressFormat.PNG, 85, fos); fos.flush(); fos.close(); return Uri.fromFile(img); } catch (FileNotFoundException e) { e.printStackTrace(); return null; } catch (IOException e) { e.printStackTrace(); return null; } }
总结:
1、拍照拍摄图片:调用系统相机>>onActivityResult中得到返回的图片>>保存图片>>调用裁剪方法>>onActivityResult中得到返回的裁剪图片>>显示头像
2、相册选择图片:调用相册>>onActivityResult中得到返回的图片Uri(content://)>>转换Uri类型并保存图片>>调用裁剪方法>>onActivityResult中得到返回的裁剪图片>>显示头像
0 0
- Android项目开发之头像上传
- android开发之用户头像上传
- android开发之用户头像上传
- android开发之用户头像上传
- android开发之用户头像上传
- android开发之用户头像上传
- Android之头像上传
- iOS开发之post 头像上传
- Android开发之头像设置
- Android开发之头像上传(包含拍照,从相册选择图片,裁剪等)
- iOS开发上传头像
- android头像上传功能
- android上传头像
- android 上传头像
- 转:Android上传头像
- android 上传头像
- android 选择头像上传
- Android 上传头像
- 在Java中如何高效的判断数组中是否包含某个元素
- Java语言基础
- 日期简单操作
- SSH登录卡慢的问题
- 腾讯的sparkgraph应用
- Android项目开发之头像上传
- Android编程规范
- <转载>C++各数据类型最大最小值
- 文章标题
- poj 3259 负权回路+Bellman
- 【数据结构】STL——set容器
- 两张链表查询 涉及多个字段查询
- Java后台开发<二>:Spirng+SpringMVC+Maven+Mybatis+MySQL项目搭建
- 前端资源教程汇聚