• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android设备上获取照片、裁剪图片、压缩图片

Android设备上获取照片、裁剪图片、压缩图片

作者:xia_的专栏 字体:[增加 减小] 来源:互联网 时间:2017-07-22

xia_的专栏通过本文主要向大家介绍了android,图片等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

前言

在做上一个项目时深深受到了图片上传的苦恼。图片上传主要分为两个部分,首先要获取图片,而获取图片可以分为从文件获取或者拍照获取。第二个部分才是上传图片,两个部分都是走了不少弯路。由于Android系统的碎片化比较严重,我们可能出现在第一台机子上能获取图片,但是换一个机子就不能获取图片的问题,并且在Android6.0,7.0之后也要做一定的适配,这样对于开发者来说,无疑很蛋疼。由于也是初学者,很多东西没有考虑到,适配起来也是有点难度的。

这几天也是从github上找到了一个库(地址在这TakePhoto),经过简单的学习之后,发现用起来还是蛮简单的,并且在不同机型之间都能达到同样的效果。更重要的是可以根据不同配置达到不同的效果

接下来看下用法

获取图片

1) 获取TakePhoto对象

一) 通过继承的方式

  • 继承TakePhotoActivity、TakePhotoFragmentActivity、TakePhotoFragment三者之一。
  • 通过getTakePhoto()获取TakePhoto实例进行相关操作。
  • 重写以下方法获取结果
 void takeSuccess(TResult result);
 void takeFail(TResult result,String msg);
 void takeCancel();

这种方法使用起来虽然简单,但是感觉定制性不高,必须继承指定的Activity,而 有时我们已经封装好了BaseActivity,不想再改了。有时候通过继承无法满足实际项目的需求。

二) 通过组装的方式去使用

  • 实现TakePhoto.TakeResultListener,InvokeListener接口。
  • 在 onCreate,onActivityResult,onSaveInstanceState方法中调用TakePhoto对用的方法。
  • 重写onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults),添加如下代码。
  @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        //以下代码为处理Android6.0、7.0动态权限所需
        TPermissionType type=PermissionManager.onRequestPermissionsResult(requestCode,permissions,grantResults);
        PermissionManager.handlePermissionsResult(this,type,invokeParam,this);
    }
  • 重写TPermissionType invoke(InvokeParam invokeParam)方法,添加如下代码:
 @Override
    public TPermissionType invoke(InvokeParam invokeParam) {
        TPermissionType type=PermissionManager.checkPermission(TContextWrap.of(this),invokeParam.getMethod());
        if(TPermissionType.WAIT.equals(type)){
            this.invokeParam=invokeParam;
        }
        return type;
    }
  • 添加如下代码获取TakePhoto实例:
   /**
     *  获取TakePhoto实例
     * @return
     */
    public TakePhoto getTakePhoto(){
        if (takePhoto==null){
            takePhoto= (TakePhoto) TakePhotoInvocationHandler.of(this).bind(new TakePhotoImpl(this,this));
        }
        return takePhoto;
    }    

2)自定义UI

不仅可以对于参数自定义,也可以对于UI的自定义,比如自定义相册,自定义Toolbar, 自定义状态栏,自定义提示文字,自定义裁切工具(需要使用自带的TakePhoto裁剪才行)。

3)通过TakePhoto对象获取图片

支持从相册获取,也支持拍照,相关Api

 * 从相机获取图片并裁剪
 * @param outPutUri 图片裁剪之后保存的路径
 * @param options 裁剪配置             
 */
void onPickFromCaptureWithCrop(Uri outPutUri, CropOptions options);
/**
 * 从相册中获取图片并裁剪
 * @param outPutUri 图片裁剪之后保存的路径
 * @param options 裁剪配置
 */
void onPickFromGalleryWithCrop(Uri outPutUri, CropOptions options);
/**
 * 从文件中获取图片并裁剪
 * @param outPutUri 图片裁剪之后保存的路径
 * @param options 裁剪配置
 */
void onPickFromDocumentsWithCrop(Uri outPutUri, CropOptions options);
/**
 * 图片多选,并裁切
 * @param limit 最多选择图片张数的限制
 * @param options  裁剪配置
 * */
void onPickMultipleWithCrop(int limit, CropOptions options);

4)裁剪配置

  • CropOptions 用于裁剪的配置类,可以对图片的裁剪比例,最大输出大小,以及是否使用TakePhoto自带的裁剪工具进行裁剪等,进行个性化配置。

  • 压缩图片 onEnableCompress(CompressConfig config,boolean showCompressDialog)

  • 指定压缩工具 takePhoto里面自带压缩算法,也可以通过第三方的Luban进行压缩

对于TakePhoto的二次封装

封装是对第二种方法的封装,主要参考了第一种的思想封装的。
关于TakePhoto的库代码全部封装到一个TakePhotoUtil工具类中,看代码:

public class TakePhotoUtil implements TakePhoto.TakeResultListener, InvokeListener {

    private static final String TAG = TakePhotoUtil.class.getName();
    private TakePhoto takePhoto;
    private InvokeParam invokeParam;
    private Activity activity;
    private Fragment fragment;

    public TakePhotoUtil(Activity activity){
        this.activity = activity;
  
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android:手把手教你 实现Activity 与 Fragment 相互通信(含Demo)
  • android自定义圆角背景实现富文本标题展示
  • 自定义收集用户行为统计库 (非常方便 可以自己拓展)
  • Android 6.0 Phone"通话显示"查询流程
  • Android缓存处理
  • 自定义进度条PictureProgressBar——从开发到开源发布全过程
  • 详解Android中的SQLite数据库存储
  • Android设备上获取照片、裁剪图片、压缩图片
  • Android触摸事件分发机制完全解析《一》
  • Android-SQLite和SQLiteOpenHelper

相关文章

  • 2017-05-26Android studio 插件安装 plugin
  • 2017-05-26Android 应用程序集成FaceBook 登录,androidfacebook
  • 2017-05-26android的消息机制
  • 2017-05-26关于Linux的core dump
  • 2017-05-26做了5年软件测试了,写写心得
  • 2017-05-26关于安卓APP的启动界面,安卓APP启动界面
  • 2017-05-26Form and Control KeyEvent
  • 2017-05-26【lushengduan】01、搭建安卓App开发环境 编写程序HelloWorld,lushengduan安卓
  • 2017-05-26Android使用静默安装时碰见的问题,android静默
  • 2017-05-26手游项目总结,游项目总结

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android捕获崩溃异常,Android捕获崩溃
    • Android,androidstudio
    • Android WebView远程代码执行漏洞简析
    • andriod 获取电池的信息,andriod获取电池
    • Android 工具包 xUtils 3.3.16,xutils3.3.16
    • Android Canvas之Path操作
    • Android React-Native系列之(一)零基础搭建React-Native开发环境
    • 功能强大的StickyHeaderListView:标题渐变、吸附悬停、筛选分类、动态头部,
    • Android ExpandableListView相关介绍
    • 高并发低基数多字段任意组合查询的优化

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有