功能强大的图片截取修剪神器:Android SimpleCropView及其实例代码重用简析(转)
功能强大的图片截取修剪神器: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及其实例代码重用简析(转)的更多相关文章
- 插件介绍 :cropper是一款使用简单且功能强大的图片剪裁jQuery插件。
简要教程 cropper是一款使用简单且功能强大的图片剪裁jQuery插件.该图片剪裁插件支持图片放大缩小,支持鼠标滚轮操作,支持图片旋转,支持触摸屏设备,支持canvas,并且支持跨浏览器使用. c ...
- jQuery功能强大的图片查看器插件
简要教程 viewer是一款功能强大的图片查看器jQuery插件.它可以实现ACDsee等看图软件的部分功能.它可以对图片进行移动,缩放,旋转,翻转,可以前后浏览一组图片.该图片查看器还支持移动设备, ...
- Android 11(R) Power HAL AIDL简析 -- 基本接口
Android 11(R) Power HAL AIDL将分三篇文章来介绍: Android 11(R) Power HAL AIDL简析 -- 基本接口 Android 11(R) Power HA ...
- Android Support Library 23.2用法简析
写在前面的几句话 前几天谷歌发布了android-support-library-23.2支持库,这一次23.2版本增加了一些新的支持库以及新的功能.接下来这篇文章,就是对这些新功能部分做简单的用法介 ...
- Android 12(S) 图像显示系统 - drm_hwcomposer 简析(上)
必读: Android 12(S) 图像显示系统 - 开篇 前言 Android源码中有包含drm_hwcomposer:/external/drm_hwcomposer/ drm_hwcompose ...
- Android声音播放实例代码
布局文件: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=&q ...
- Android热补丁技术—dexposed原理简析(手机淘宝采用方案)
上篇文章<Android无线开发的几种常用技术>我们介绍了几种android移动应用开发中的常用技术,其中的热补丁正在被越来越多的开发团队所使用,它涉及到dalvik虚拟机和android ...
- Android热补丁技术—dexposed原理简析(阿里Hao)
本文由嵌入式企鹅圈原创团队成员.阿里资深工程师Hao分享. 上篇文章<Android无线开发的几种常用技术>我们介绍了几种android移动应用开发中的常用技术,其中的热补丁正在被越来越多 ...
- Android 12(S) 图像显示系统 - drm_hwcomposer 简析(下)
必读: Android 12(S) 图像显示系统 - 开篇 合成方式 合成类型的定义:/hardware/interfaces/graphics/composer/2.1/IComposerClien ...
随机推荐
- 一些 iOS 常用的第三方库
网络通信 AFNetworking 轻量级的通讯类库,使用非常简单.建议更新到最新版,前几天看新闻说之前有个逻辑性的 bug https://github.com/AFNetworking/AFNet ...
- JAVA之抽象类与抽象方法
抽象方法:在类中没有方法体的方法,就是抽象方法.抽象类:含有抽象方法的类就叫抽象类.|||||||||抽象类不能被实例化(new)为什么要使用抽象方法?(以下是个人观点)因 为在面向对象的编程的思想中 ...
- 排序算法的实现(冒泡,选择,插入 O(N*N)--理解方法实现
以前也看过很多排序算法的原理,每次都想自己实现一下,一直都再拖,现在着牛课网学习算法课程,希望自己能够坚持练习. //对于一个int数组,请编写一个选择冒泡算法,对数组元素排序. //给定一个int数 ...
- 解决dubbo问题:forbid consumer(2)
线下环境经常出现类似这种异常: com.alibaba.dubbo.rpc.RpcException: Forbid consumer 10.0.53.69 access service com.ku ...
- H5性能调优
概述 PC优化手段在Mobile侧同样适用 在Mobile侧我们提出三秒种渲染完成首屏指标 基于第二点,首屏加载3秒完成或使用Loading 基于联通3G网络平均338KB/s(2.71Mb/s),所 ...
- URL相对路径和URL绝对路径
经常在页面中引用图片,html页面等,自己常常弄错相对路径和绝对路径,今天写下此文总结一下. 直接举例说明吧. 在 D:\例子\html下有这么几个文件和文件夹 1.若引用的资源和本身在 ...
- NYOJ-277-车牌号
车牌号 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描写叙述 茵茵非常喜欢研究车牌号码,从车牌号码上能够看出号码注冊的早晚,据研究发现,车牌号码是按字典序发放的,如今她收集 ...
- JavaScript 获取文件名,后缀名
function getBaseName(str) { var segs = str.split('.'); if(segs.length > 1) segs.pop(); return seg ...
- mysql :安装过程中的问题
安装mysql 选择路径的问题 出现如下问题:说明之前安装过mysql,写在的不干净
- 微软在GitHub上开放源代码
https://github.com/MSOpenTech 点击链接:openFrameworks :https://github.com/openframeworks/openFrameworks ...