功能强大的图片截取修剪神器: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. 用kermit通过串口往nandflash任意地址里烧写任何文件!

    1.安装kermit #apt-get install ckermit 2.使用kermit之前,在用户宿主目录下(/home/用户名/)创建一个名为.kermrc的配置文件,内容如下 : set l ...

  2. 手把手教你使用FineUI+动软代码生成器开发一个b/s结构的取送货管理信息系统(附源码)之开篇

    一 本系列随笔概览及产生的背景 近阶段接到一些b/s类型的软件项目,但是团队成员之前大部分没有这方面的开发经验,于是自己选择了一套目前网上比较容易上手的开发框架(FineUI),计划录制一套视频讲座, ...

  3. CSS3动画那么强,requestAnimationFrame还有毛线用?

    一.哟,requestAnimationFrame, 新同学,先自我介绍下 Hello, 大家好,我就是风姿卓越,万种迷人的requestAnimationFrame,呵呵呵呵.很高兴和大家见面,请多 ...

  4. web-51job(前程无忧)-账户、简历-数据库设计

    ylbtech-DatabaseDesgin:web-51job(前程无忧)-账户.简历-数据库设计   1.A,数据库关系图 1.B,数据库设计脚本 /App_Data/1,Account.sql ...

  5. 一个人的安全部之ELK接收Paloalto日志并用钉钉告警

    起因 通报漏洞后,开发未能及时修复漏洞,导致被攻击,领导说我发现被攻击的时间晚了,由于一个人安全部精力有限未能及时看IPS告警,于是做了个钉钉告警. 本人环境介绍 ubuntu 14.04 pytho ...

  6. 智能选择器和语义化的CSS

    本文由白牙根据Heydon Pickering的<Semantic CSS With Intelligent Selectors>所译,整个译文带有我自己的理解与思想,如果译得不好或不对之 ...

  7. Java6 WebService的发布

    Java6 WebService的发布   WebService服务发布往往比较混乱,Axis2的发布形式与XFire发布方式差别很大,而Java6 Web服务的发布与Axis2.XFire的Web服 ...

  8. 走进C++程序世界-----operator new delete 重载

     在C++ 的世界里,new 和delete 是keyword.而在C的世界里相相应的malloc和free是函数,关键C++的new和delete分析,详见前面的章节.这里就不在过多的介绍了.链接. ...

  9. JRebel 7.0.10 for intellij IDEA 2017.1

    1什么是JRebel? JRebel是一套JavaEE开发工具.JRebel是一款JAVA虚拟机插件,它使得JAVA程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响.JReb ...

  10. go语言的一些特性

    go语言中如何判断一个方法是私有的还是公有的?说出来你可能不信,通过首字母的大小写. 不管是一个变量还是一个函数,如果它的首字母是大写的,那么它就是包外可见的,也就是说可以 从这个包的外面访问这个资源 ...