Android 编辑头像功能简单实现实例(图片选取,裁剪)
程序员文章站
2023-12-01 17:30:52
本文介绍了android 编辑头像功能的简单实例,可以实现拍照,图片选取,裁剪。
拍照
public static void startcamera(fra...
本文介绍了android 编辑头像功能的简单实例,可以实现拍照,图片选取,裁剪。
拍照
public static void startcamera(fragment fragment){ file file=new file(environment.getexternalstoragepublicdirectory(environment.directory_dcim)+ file.separator+"user_icon.jpg"); intent intent=new intent(mediastore.action_image_capture);//intent隐式调用启动拍照界面 intent.putextra("return-data",false);//该属性设置为false表示拍照后不会将数据返回到onresluet方法中(建议设置为false,这样获取的图片会比较清晰) componentname componentname=intent.resolveactivity(fragment.getcontext().getpackagemanager()); intent.putextra(mediastore.extra_output, uri.fromfile(file));//该属性设置的是拍照后图片保存的位置 //防止app启动意图时崩溃 if (componentname!=null){ fragment.startactivityforresult(intent,variable.request_camera_code); } }
从相册中选取
public static void startphoto(fragment fragment){ intent intent = new intent(intent.action_get_content);//intent隐式调用启动相册界面 intent.settype("image/*");//设置数据类型 componentname componentname = intent.resolveactivity(fragment.getcontext().getpackagemanager()); log.d("tag", "startphoto: "+componentname); if (componentname != null) {//防止启动意图时app崩溃 fragment.startactivityforresult(intent, variable.request_photo); } }
裁剪选取或拍摄的图片
public static void cropphoto(fragment fragment, uri uri){ //设置裁剪图片保存位置 file bomb=new file(fragment.getcontext().getexternalcachedir(),"bmob"); log.d("tag", "cropphoto: "+bomb); if (!bomb.exists()){ bomb.mkdir(); } file file=new file(bomb,"user_icon.jpg"); if (!file.exists()){ try { file.createnewfile(); } catch (ioexception e) { e.printstacktrace(); } } intent intent=new intent("com.android.camera.action.crop");//intent隐式调用启动拍照界面 intent.setdataandtype(uri,"image/*");//设置需要裁剪的图片地址 intent.putextra("crop", "true");//通过put(key,value)方法设置相关属相 intent.putextra("aspectx", 1);//设置图片宽高比例 intent.putextra("aspecty", 1); intent.putextra("outputx", 240);//设置图片宽高 intent.putextra("outputy", 240); intent.putextra("return-data", false);//该属性设置为false表示拍照后不会将数据返回到onresluet方法中(建议设置为false,这样获取的图片会比较清晰) intent.putextra(mediastore.extra_output, uri.fromfile(file));//该属性设置的是拍照后图片保存的位置 intent.putextra("outputformat", bitmap.compressformat.jpeg.tostring());//设置输出格式 intent.putextra("nofacedetection", true);//是否取消人脸识别 /*componentname componentname = intent.resolveactivity(context.getpackagemanager()); log.d("tag", "cropphoto: "+componentname); if (componentname!=null){ fragment.startactivityforresult(intent,variable.request_crop); }*/ fragment.startactivityforresult(intent,variable.request_crop); }
重写onactivityresult方法获取并设置对应数据
@override public void onactivityresult(int requestcode, int resultcode, intent data) { super.onactivityresult(requestcode, resultcode, data); switch (requestcode){ case variable.request_camera_code://当返回的请求码是启动拍照时设置的,此时调用裁剪方法 assist.cropphoto(registerfragment.this, uri.fromfile(new file(environment .getexternalstoragepublicdirectory(environment.directory_dcim),"user_icon.jpg"))); break; case variable.request_photo://当返回的请求码是启动相册时设置的,此时获取图片uri并调用裁剪方法 assist.cropphoto(registerfragment.this,data.getdata()); break; case variable.request_crop://当返回的请求码是启动裁剪时设置的,此时便可获取最终裁剪好的图片 operation op=new operation(context); string path=context.getexternalcachedir()+ file.separator+"bmob"+file.separator+"user_icon.jpg";//裁剪好的图片保存位置 bitmap icon=op.decodebitmap(path);//加载本地图片,并获取大小合适的bitmap if (icon!=null){ user_icon.setimagebitmap(icon);//将获取的图片设置到imagerview bmobfile=new bmobfile(new file(path)); bmobfile.uploadblock(new uploadfilelistener() { @override public void done(bmobexception e) { if (e==null){ //bmob上传图片成功 } } }); } break; } }
最终效果展示
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。