Android开发从相册中选取照片的示例代码
程序员文章站
2023-12-17 10:53:52
最近项目在做一个功能:就是需要从用户选择头像跳转到相册选择图片,这应该是一个很简单的需求,但是在网上搜了一下有好多都讲的很乱,其实用几十行代码就可以实现的为什么要说的那么复...
最近项目在做一个功能:就是需要从用户选择头像跳转到相册选择图片,这应该是一个很简单的需求,但是在网上搜了一下有好多都讲的很乱,其实用几十行代码就可以实现的为什么要说的那么复杂呢,下面就简单说一下喽。
下面说两种方法分别是直接选择相册返回,另外一种为选择相册之后进行裁剪。先上效果图
(1)直接选择相册后返回
第一步就是主要跳转的相册
//在这里跳转到手机系统相册里面 intent intent = new intent( intent.action_pick, android.provider.mediastore.images.media.external_content_uri); startactivityforresult(intent, image_request_code);
第二步就是返回的时候获取相册的路径
@override protected void onactivityresult(int requestcode, int resultcode, intent data) { super.onactivityresult(requestcode, resultcode, data); //在相册里面选择好相片之后调回到现在的这个activity中 switch (requestcode) { case image_request_code://这里的requestcode是我自己设置的,就是确定返回到那个activity的标志 if (resultcode == result_ok) {//resultcode是setresult里面设置的code值 try { uri selectedimage = data.getdata(); //获取系统返回的照片的uri string[] filepathcolumn = {mediastore.images.media.data}; cursor cursor = getcontentresolver().query(selectedimage, filepathcolumn, null, null, null);//从系统表中查询指定uri对应的照片 cursor.movetofirst(); int columnindex = cursor.getcolumnindex(filepathcolumn[0]); path = cursor.getstring(columnindex); //获取照片路径 cursor.close(); bitmap bitmap = bitmapfactory.decodefile(path); iv_photo.setimagebitmap(bitmap); } catch (exception e) { // todo auto-generatedcatch block e.printstacktrace(); } } break; } }
(2) 选择图片后裁剪先上图
首先也是要调起相册
// 使用意图直接调用手机相册 intent intent = new intent( intent.action_pick, android.provider.mediastore.images.media.external_content_uri); // 打开手机相册,设置请求码 startactivityforresult(intent, image_request_code);
然后这里增加了一步就是用户选择了相册之后然后再增加裁剪功能
@override protected void onactivityresult(int requestcode, int resultcode, intent data) { if (resultcode != result_ok) { return; } else { switch (requestcode) { case image_request_code: resizeimage(data.getdata()); break; case resize_request_code: if (data != null) { showresizeimage(data); } break; } } super.onactivityresult(requestcode, resultcode, data); } //这里增加裁剪 public void resizeimage(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, resize_request_code); } private void showresizeimage(intent data) { bundle extras = data.getextras(); if (extras != null) { bitmap photo = extras.getparcelable("data"); //裁剪之后设置保存图片的路径 string path = getfilesdir().getpath() + file.separator + image_file_name; //压缩图片 imageutils.saveimage(photo, path); new bitmapdrawable(); drawable drawable = new bitmapdrawable(photo); iv_photo.setimagedrawable(drawable); } }
ok,源代码下载。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。