项目地址:https://github.com/kyleduo/SwitchButton
转眼间SwitchButton项目发布已经有三年多了,虽然只是一个自定义控件,却也包含了不少的细节,比如尺寸计算,自定义属性,颜色运算,事件处理,动画等等。现在看这些都是很简单的技术,但是汇总到一起就成了一个有用的工具。我赞同做技术要脚踏实地,联系使用场景,不能空想,学的技术要有实用价值,做出来的东西能提高生产力。
之所以版本号“跃进”到了2.0.0,主要原因是因为这个版本修改了几个属性名,导致使用者需要修改名称甚至重新计算参数值。开发2.0.0的过程也感到有些惭愧,虽然使用上问题不大,但是有几个参数其实连我自己也没有想清楚具体的含义,凭想象的效果设计出参数以及计算公式,但实际上并不全面,明确。比如kswBackMeasureRatio
,看名字像是测量背景时使用的比例,实际上计算后背景的尺寸几乎不会满足这个比例。更新后的字段’kswThumbRangeRatio
,明确了该字段为thumb移动范围和其宽度的比例,在没有额外参数(比如文字)导致强制拉伸外,这个比例是会体现在最终尺寸中的。
另一个原因是,在这个版本中,我重新明确了尺寸的计算公式,同时支持使用确定的宽高来定义SwitchButton的内容大小。是的,之前的版本中SwitchButton是根据thumb的大小以及测量比例进行计算View大小的,即便设置了确定的宽高。完成开发之后,我整理了一个示意图,展示了SwitchButton大部分参数的含义,以及它们如何确定了SwitchButton的尺寸。
类似这种比较精确的“制图”看起来很爽,很规整的感觉,想起了大学时学的《工程制图》
实现一个功能,不能只关注“一般情况”,而要想清楚该功能可能出现的任何场景和环境;通过逻辑的严密性保证在任何条件下都能对结果做出可靠的预期,而不能出现在部分条件下无法做出预期的情况,进而努力做到在任何条件下都符合预期。SwitchButton这个例子中,先前的版本在计算尺寸已经定位文字时就会出现很难预期的情况,导致我在重新设计计算公式时也绕了很多弯路。从这个角度看,编码的步骤会显得不那么重要,实现逻辑的设计以及和协议的设计更加举足轻重一些。