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

相关文章
|
4月前
|
Android开发
Android开发表情emoji功能开发
本文介绍了一种在Android应用中实现emoji表情功能的方法,通过将图片与表情字符对应,实现在`TextView`中的正常显示。示例代码展示了如何使用自定义适配器加载emoji表情,并在编辑框中输入或删除表情。项目包含完整的源码结构,可作为开发参考。视频演示和源码详情见文章内链接。
101 4
Android开发表情emoji功能开发
|
4月前
|
安全 Android开发 iOS开发
Android vs iOS:探索移动操作系统的设计与功能差异###
【10月更文挑战第20天】 本文深入分析了Android和iOS两个主流移动操作系统在设计哲学、用户体验、技术架构等方面的显著差异。通过对比,揭示了这两种系统各自的独特优势与局限性,并探讨了它们如何塑造了我们的数字生活方式。无论你是开发者还是普通用户,理解这些差异都有助于更好地选择和使用你的移动设备。 ###
92 3
|
5月前
|
存储 缓存 编解码
Android经典面试题之图片Bitmap怎么做优化
本文介绍了图片相关的内存优化方法,包括分辨率适配、图片压缩与缓存。文中详细讲解了如何根据不同分辨率放置图片资源,避免图片拉伸变形;并通过示例代码展示了使用`BitmapFactory.Options`进行图片压缩的具体步骤。此外,还介绍了Glide等第三方库如何利用LRU算法实现高效图片缓存。
92 20
Android经典面试题之图片Bitmap怎么做优化
|
4月前
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
Android远程连接和登录FTPS服务代码(commons.net库)
61 1
|
4月前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异:从代码到用户体验
【10月更文挑战第5天】在移动应用开发的广阔天地中,安卓和iOS两大平台各占半壁江山。它们在技术架构、开发环境及用户体验上有着根本的不同。本文通过比较这两种平台的开发过程,揭示背后的设计理念和技术选择如何影响最终产品。我们将深入探讨各自平台的代码示例,理解开发者面临的挑战,以及这些差异如何塑造用户的日常体验。
|
5月前
|
存储 Java Android开发
🔥Android开发大神揭秘:从菜鸟到高手,你的代码为何总是慢人一步?💻
在Android开发中,每位开发者都渴望应用响应迅速、体验流畅。然而,代码执行缓慢却是常见问题。本文将跟随一位大神的脚步,剖析三大典型案例:主线程阻塞导致卡顿、内存泄漏引发性能下降及不合理布局引起的渲染问题,并提供优化方案。通过学习这些技巧,你将能够显著提升应用性能,从新手蜕变为高手。
59 2
|
6月前
|
编解码 测试技术 Android开发
Android经典实战之用 CameraX 库实现高质量的照片和视频拍摄功能
本文详细介绍了如何利用CameraX库实现高质量的照片及视频拍摄功能,包括添加依赖、初始化、权限请求、配置预览与捕获等关键步骤。此外,还特别针对不同分辨率和帧率的视频拍摄提供了性能优化策略,确保应用既高效又稳定。
622 1
Android经典实战之用 CameraX 库实现高质量的照片和视频拍摄功能
|
6月前
|
JSON JavaScript 前端开发
Android调用Vue中的JavaScript代码
Android调用Vue中的JavaScript代码
93 3
|
5月前
|
Android开发 开发者
Android平台无纸化同屏如何实现实时录像功能
Android平台无纸化同屏,如果需要本地录像的话,实现难度不大,只要复用之前开发的录像模块的就可以,对我们来说,同屏采集这块,只是数据源不同而已,如果是自采集的其他数据,我们一样可以编码录像。
|
6月前
|
数据处理 开发工具 数据安全/隐私保护
Android平台RTMP推送|轻量级RTSP服务|GB28181接入之文字、png图片水印的精进之路
本文探讨了Android平台上推流模块中添加文字与PNG水印的技术演进。自2015年起,为了满足应急指挥及安防领域的需求,逐步发展出三代水印技术:第一代为静态文字与图像水印;第二代实现了动态更新水印内容的能力,例如实时位置与时间信息;至第三代,则优化了数据传输效率,直接使用Bitmap对象传递水印数据至JNI层,减少了内存拷贝次数。这些迭代不仅提升了用户体验和技术效率,也体现了开发者追求极致与不断创新的精神。

热门文章

最新文章

  • 1
    如何修复 Android 和 Windows 不支持视频编解码器的问题?
  • 2
    Android历史版本与APK文件结构
  • 3
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 4
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
  • 5
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
  • 6
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
  • 7
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 8
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 9
    Android经典面试题之Kotlin中Lambda表达式和匿名函数的区别
  • 10
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 1
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    24
  • 2
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    29
  • 3
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    38
  • 4
    Android历史版本与APK文件结构
    123
  • 5
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    32
  • 6
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    26
  • 7
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
    60
  • 8
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    37
  • 9
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
    73
  • 10
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    123