功能强大的图片截取修剪神器:Android SimpleCropView及其实例代码重用简析-阿里云开发者社区

开发者社区> 开开心心过> 正文

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

简介:  功能强大的图片截取修剪神器:Android SimpleCropView及其实例代码重用简析 SimpleCropView是github上第一个第三方开源的图片修剪截取利器,功能强大,设计良好。
+关注继续查看


功能强大的图片截取修剪神器: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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
计算机基础2 | 学习笔记
快速学习计算机基础2。
6 0
计算机基础1 | 学习笔记
快速学习计算机基础1。
7 0
计算机基础3 | 学习笔记
快速学习计算机基础3。
7 0
数据类型-数值和字符串 | 学习笔记
快速学习数据类型-数值和字符串。
5 0
作用域及作用域链 | 学习笔记
快速学习作用域及作用域链。
5 0
Linux 命令执行过程 | 学习笔记
快速学习 Linux 命令执行过程。
7 0
Linux 基本操作 | 学习笔记
快速学习 Linux 基本操作。
8 0
centOS 系统安装方法详解 | 学习笔记
快速学习 centOS 系统安装方法详解。
6 0
冬季实战营第一期学习报告
通过五天学习与实操,对ECS云服务器入门、快速搭建LAMP环境、部署MySQL数据库、回顾搭建Docker环境和Spring Boot以及使用PolarDB和ECS搭建门户网站操作,对本期学习与实操的认识。
7 0
系统安装前准备 | 学习笔记
快速学习系统安装前准备。
5 0
682
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载