uCrop源码思路分析--流程梳理

本文详细分析了uCrop库的工作流程,从手势识别、图片处理到裁剪框的初始化和布局。通过GestureCropImageView识别用户手势,TransformImageView处理图片平移、缩放和旋转,CropImageView作为核心类管理这些功能。文章还探讨了如何根据裁剪比例初始化裁剪控件,以及如何利用Matrix进行图片变换。
摘要由CSDN通过智能技术生成

首先要把思路弄清楚,先将这个项目运行在手机上,玩一玩,看看他都有哪些功能,然后再考虑那些功能是怎么实现的。
项目Github链接
第一阶段
折腾一番后就大致有个印象了,接下就可以分析具体功能了,且不看布局这些是怎么弄的,先从这个库的入口开始分析,就是我们是怎么与图片进行交互的,手势! 对,我们通过手势来改变图片的显示,可以平移,旋转,放大,我们应该从这里切入,整个思路就会比较清晰。
那么,问题来了。
如何分配这些功能,我应该创建几个类,他们之间应该是怎样的继承关系等等,这就是体现作者功底的时候了,究竟该如何架构,是很值得研究的问题。
1.手势的处理
我们需要一个类,这个类可以识别用户的手势,然后调用相应的方法。这里肯定涉及到多点触控
问题1:如何判断用户的最后一根手指已经释放?
假如我们现在已经拿到了用户的手势,那么肯定需要接着调用某个类的某种方法来进行处理,比如,我们已经识别出是一个平移的手势,势必有一个postTranslate(disX,disY)方法来对应。
那具体平移的操作又该放在哪个类中呢,还有缩放,旋转,裁剪等等方法。
问题2:如何确定类的功能,如何去耦合
我是想不到一个完美的方案来解决这个问题,或者说,我必须要在做的过程中慢慢的优化架构,而暂时不具备在开始项目的时候就直接描绘出轮廓,毕竟是菜鸟。
分层的思想
作者在这里分出了三个类,各有不同的功能
GestureCropImageView
专门识别用户的手势,平移,缩放,旋转。他并不关心怎样去做具体的操作,也不关心裁剪。
TransformImageView
基本功能包括加载图片,对图片进行平移,缩放,旋转,并且通知监听者正在进行哪些操作。
CropImageView
核心类。具体的手势识别,具体的平移操作,这些都只是一个功能点,这个类的作用更像是一个管理者,负责将这些功能点组合起来,达到好的用户体验和库真正功能的实现。


第二阶段
第一阶段只是一个大致的印象,有了一个宏观脉络,可以到现在,我们还一行代码都没看呢?
折腾这个库的时候,我很好奇他进去的时候是如何摆放图片和裁剪提示框的,如何做到正好能让他们吻合。
问题3:怎样初始化我们的裁剪控件,达到和裁剪提示框吻合的效果
作者使用了一个uCropView作为外层嵌套布局,里面包含我们的裁剪提示框OverlayView和裁剪控件GestureCropImageView.
因为作者将这个库设计得很灵活,用户可以选择指定的裁剪比例,有16:9,4:3等,还可以使用原生图片的宽高比,并且在控件中可以动态调整裁剪比例,这就必然需要两个控件之间进行交互,最好的办法就是设置一个监听器。

mGestureCropImageView.setCropBoundsChangeListener(new CropImageView.CropBoundsChangeL
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值