<强>前言强>
在做上一个项目时深深受到了图片上传的苦恼。图片上传主要分为两个部分,首先要获取图片,而获取图片可以分为从文件获取或者拍照获取第。二个部分才是上传图片,两个部分都是走了不少弯路。由于Android系统的碎片化比较严重,我们可能出现在第一台机子上能获取图片,但是换一个机子就不能获取图片的问题,并且在Android6.0, 7.0之后也要做一定的适配,这样对于开发者来说,无疑很蛋疼,由于也是初学者,很多东西没有考虑到,适配起来也是有点难度的。
这几天也是从github上找到了一个库(地址在这TakePhoto),经过简单的学习之后,发现用起来还是蛮简单的,并且在不同机型之间都能达到同样的效果。更重要的是可以根据不同配置达到不同的效果
接下来看下用法
<强>获取图片强>
1)获取TakePhoto对象
一)通过继承的方式
继承TakePhotoActivity、TakePhotoFragmentActivity TakePhotoFragment三者之一。
通过getTakePhoto()获取TakePhoto实例进行相关操作。
重写以下方法获取结果
空白takeSuccess (TResult结果); 空白takeFail (TResult结果字符串味精); 空白takeCancel (); >之前这种方法使用起来虽然简单,但是感觉定制性不高,必须继承指定的活动,而有时我们已经封装好了BaseActivity,不想再改了。有时候通过继承无法满足实际项目的需求。
二)通过组装的方式去使用
实现TakePhoto。TakeResultListener, InvokeListener接口。
在> @Override 公共空间> @Override 公共TPermissionType调用(InvokeParam InvokeParam) { TPermissionType类型=PermissionManager.checkPermission (TContextWrap.of(这),invokeParam.getMethod ()); 如果(TPermissionType.WAIT.equals(类型)){ this.invokeParam=invokeParam; } 返回类型; } >之前添加如下代码获取TakePhoto实例:
/* * *获取TakePhoto实例 * @return */公共TakePhoto getTakePhoto () { 如果(takePhoto==null) { takePhoto=(takePhoto) TakePhotoInvocationHandler.of(这个)。绑定(新TakePhotoImpl(这)); } 返回takePhoto; } >之前2)自定义UI
不仅可以对于参数自定义,也可以对于UI的自定义,比如自定义相册,自定义工具栏,自定义状态栏,自定义提示文字,自定义裁切工具(需要使用自带的TakePhoto裁剪才行)。
3)通过TakePhoto对象获取图片
支持从相册获取,也支持拍的照,相关Api
*从相机获取图片并裁剪 * @param outPutUri图片裁剪之后保存的路径 * @param选项裁剪配置 */空白> 公共类TakePhotoUtil实现TakePhoto。TakeResultListener InvokeListener { 私有静态最终字符串标签=TakePhotoUtil.class.getName (); 私人TakePhoto TakePhoto; 私人InvokeParam InvokeParam; 私人活动活动; 私人片段片段; 公共TakePhotoUtil(活动活动){ 这一点。活动=活动; } 公共TakePhotoUtil(片段片段){ this.fragment=片段; }/* * *获取TakePhoto实例 * @return */公共TakePhoto getTakePhoto () { 如果(takePhoto==null) { takePhoto=(takePhoto) TakePhotoInvocationHandler.of(这个)。绑定(新TakePhotoImpl(活动,本); } 返回takePhoto; } 公共空间> 保护TakePhotoUtil TakePhotoUtil; @Override 保护空白> @Override 保护布尔useTakePhoto () { 返回true; } >之前2)获取图片
takePhotoUtil.takePhoto (TakePhotoUtil.Select_type。PICK_BY_TAKE,新的TakePhotoUtil.SimpleTakePhotoListener () { @Override 公共空间takeSuccess (TResult结果){ .getCompressPath字符串s=result.getImage () (); 位图的位图=BitmapFactory.decodeFile(年代); iv.setImageBitmap(位图); } }); >之前takePhoto()的第一个参数是一个枚举类型的参数,分别为从相册获取和拍照获取,第二个参数为获取成功失败监听,有三个回调,由于有些回调不是必须的,所以对侦听器做了一个适配,只需要回调想要的方法即可,获取成功之后就可以通过TResult封装的参数获取想要的图片以及图片地址。对于获取到的图片地址就可以做一些上传处理。
Android获取照片,裁剪图片,压缩图片