功能强大的图片截取修剪神器:Android SimpleCropView及其实例代码重用简析

SimpleCropView是github上第一个第三方开源的图片修剪截取利器,功能强大,设计良好。我个人认为SimpleCropView比附录文章1介绍的cropper更为强大和完备,但也更为复杂,如果是简单的应用场景,那么cropper也是一个不错的选择,SimpleCropView则适应图片裁剪截取复杂的需求任务。
SimpleCropView在github上的项目主页是:https://github.com/IsseiAoki/SimpleCropView

SimpleCropView提供了非常丰富的图片截取修剪功能,涵盖常用的基本需求功能,如图片的按比例截取(4:3,16:9,7:5等等)、截取成圆形、自由裁剪、锁定比例裁剪、正方形裁剪等等。
也许因为SimpleCropView功能强大、完备,故所涉及代码不简单,SimpleCropView在github上给出实例代码整体上相对完整、紧耦合,比较难以解耦。然而本身SimpleCropView把实例代码项目写的比较像完整的组件,仔细分析大致可以看出代码运行的脉络,对SimpleCropView上项目代码稍加调整,即可完全拿来为自己所用,但需要清楚代码运行机制。
这里主要记下SimpleCropView给出的代码运行机制,清楚这些了,以后我如果自己用,就可以拿来加以修改使用。
SimpleCropView在实例代码中是从MainActivity开始运行,这个MainActivity有两个作用:(1)加载一个FrameLayout,很明显,这是一个空的、为后续加载Fragment“床”做容器准备。
(2)该MainActivity代码中有一个叫做ResultActivity.Java的activity,这个ResultActivity将是我们在自己项目中关注的目标。MainActivity实际上并不太重要,它的意义是提供一个代码运行的入口。
MainActivity最终是要将代码引入到处理图片的核心:MainFragment.java。可以说,基本上图片的处理工作就是在MainFragment里面展开的。
如果自己的项目中要使用这个MainFragment,那么MainFragment将是一个现成写好的图片修改编辑器,自己要做的无非是修改样式,或者在MainFragment的static方法getInstance里面传入一个预备要处理的图片资源作为参数。
最终经由MainFragment处理后(裁剪、修剪、截取)的图片将通过Uri的形式传入到ResultActivity里面,ResultActivity,顾名思义,结果activity!图片处理后的结果就在ResultActivity里面在一个线程run里面最终设置到开发者指定的最终目的地如某个ImageView头像。
启发:如果我不打算对SimpleCropView给出的实例代码做过大过深的解耦,那么可以重点考虑ResultActivity这个类。
举个例子,假设一个开发场景,一个页面中的头像是可以自由选择并裁剪,在这个页面中用户点击头像进入截取、裁剪头像的过程,那么我可以考虑这么做:
(1) 启动MainActivity(当然,在自己的项目中,通常把这个activity的名字改成一般的名字而不是main)并传入我们需要裁剪的图片。
(2) 在从MainActivity进入MainFragment的同时传递一个图片资源作为参数传给MainFragment,MainFragment里面处理完成后的结果就会自动进入到ResultActivity的一个id为result_image的ImageView中。

以上就是基本过程,那么我们如果为了在自己的项目中使用SimpleCropView写好的代码,那么可以把SimpleCropView给出的实例代码改造,假设我自己写的工程中某一个Fragment或者activity中某一个头像,该头像可以点击,点击后进入编辑头像。那么就这么做,点击后进入 SimpleCropView中的MainActivity -> MainFragment -> ResultAvtivity(注意此过程中,需要把图片作为参数传递,如果图片是有用户选择,那么就免去传参),最终在ResultAvtivity 中的内部线程类LoadScaledImageTask中run里面获取处理结果Bitmap sampledBitmap,这个Bitmap sampledBitmap就是我们最终需要的、剪切后的图片:

拿到这个结果Bitmap后,就大获成功,后面的代码可以采取多种形式通告给我自己项目中的需求源。至于通告的形式可以多种多样,比如广播、第三方开源的消息通讯、写入文件等等。

附录文章:
1,《android第三方开源图片裁剪截取:cropper》链接地址:http://blog.csdn.net/zhangphil/article/details/51644396 
2,《Android设置头像,手机拍照或从本地相册选取图片作为头像》链接地址:http://blog.csdn.net/zhangphil/article/details/44829747

转自:http://blog.csdn.net/zhangphil/article/details/51655275

功能强大的图片截取修剪神器:Android SimpleCropView及其实例代码重用简析(转)的更多相关文章

  1. 插件介绍 :cropper是一款使用简单且功能强大的图片剪裁jQuery插件。

    简要教程 cropper是一款使用简单且功能强大的图片剪裁jQuery插件.该图片剪裁插件支持图片放大缩小,支持鼠标滚轮操作,支持图片旋转,支持触摸屏设备,支持canvas,并且支持跨浏览器使用. c ...

  2. jQuery功能强大的图片查看器插件

    简要教程 viewer是一款功能强大的图片查看器jQuery插件.它可以实现ACDsee等看图软件的部分功能.它可以对图片进行移动,缩放,旋转,翻转,可以前后浏览一组图片.该图片查看器还支持移动设备, ...

  3. Android 11(R) Power HAL AIDL简析 -- 基本接口

    Android 11(R) Power HAL AIDL将分三篇文章来介绍: Android 11(R) Power HAL AIDL简析 -- 基本接口 Android 11(R) Power HA ...

  4. Android Support Library 23.2用法简析

    写在前面的几句话 前几天谷歌发布了android-support-library-23.2支持库,这一次23.2版本增加了一些新的支持库以及新的功能.接下来这篇文章,就是对这些新功能部分做简单的用法介 ...

  5. Android 12(S) 图像显示系统 - drm_hwcomposer 简析(上)

    必读: Android 12(S) 图像显示系统 - 开篇 前言 Android源码中有包含drm_hwcomposer:/external/drm_hwcomposer/ drm_hwcompose ...

  6. Android声音播放实例代码

    布局文件: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=&q ...

  7. Android热补丁技术—dexposed原理简析(手机淘宝采用方案)

    上篇文章<Android无线开发的几种常用技术>我们介绍了几种android移动应用开发中的常用技术,其中的热补丁正在被越来越多的开发团队所使用,它涉及到dalvik虚拟机和android ...

  8. Android热补丁技术—dexposed原理简析(阿里Hao)

    本文由嵌入式企鹅圈原创团队成员.阿里资深工程师Hao分享. 上篇文章<Android无线开发的几种常用技术>我们介绍了几种android移动应用开发中的常用技术,其中的热补丁正在被越来越多 ...

  9. Android 12(S) 图像显示系统 - drm_hwcomposer 简析(下)

    必读: Android 12(S) 图像显示系统 - 开篇 合成方式 合成类型的定义:/hardware/interfaces/graphics/composer/2.1/IComposerClien ...

随机推荐

  1. Java类的定义及其实例化

    如果你不了解类和对象的概念,请猛击这里:Java类和对象的概念 类必须先定义才能使用.类是创建对象的模板,创建对象也叫类的实例化. 下面通过一个简单的例子来理解Java中类的定义: public cl ...

  2. 尝试解答java内存问题

    在园子中看见了这个园友的问题,高手指点一下,关于编写Java程序让Jvm崩溃,恰巧这两天看了点相关的东西,也尝试了一下,下面是仁兄提出的第一个疑问,我来复现一下: package jvm; publi ...

  3. 【转】Kriging插值法

    einyboy 原文LINK Kriging插值法 克里金法是通过一组具有 z 值的分散点生成估计表面的高级地统计过程.与插值工具集中的其他插值方法不同,选择用于生成输出表面的最佳估算方法之前,有效使 ...

  4. 【Linux】CentOS7上rpm命令批量卸载删除模糊rpm包名

    例如,我要删除如下文件名匹配上wine的所有文件

  5. etcd集群日常维护

    配置文件和启动参数说明 命令行 | 配置文件 | 说明 data-dir | ETCD_DATA_DIR | 指定节点的数据存储目录,包括节点ID,集群ID,集群初始化配置,Snapshot文件,若未 ...

  6. 由jtable浅谈vector<vector<Object>>的用法(转自a718515028的专栏)

    以前只用过vector<Object>  ,但是在做从数据库导出数据放到jtable中时,发现还有个vector<vector<Object>>的用法. 先说jta ...

  7. 关于可变参数列表stdarg

    1.对于可变参数 可变参数列表通过stdarg.h中的宏实现: 主要有一个va_list类型 三个宏:va_start,va_arg,va_end; va_start格式: va_start(argu ...

  8. ASP.net的身份验证方式有哪些?

    [转] ASP.net的身份验证方式有哪些?分别是什么原理? Asp.net的身份验证有有三种,分别是"Windows | Forms | Passport",其中又以Forms验 ...

  9. ElasticSearch refresh API

    在 Elasticsearch 中,写入和打开一个新段的轻量的过程叫做 refresh . 默认情况下每个分片会每秒自动刷新一次.这就是为什么我们说 Elasticsearch 是 近 实时搜索: 文 ...

  10. python获取输入参数

    python获取输入参数 学习了:https://www.cnblogs.com/angelatian/p/5832448.html import sys模块: len(sys.argv)参数个数 s ...