66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

[TOC]

对于一款轻度使用的日历,很多开源库都可以直接使用。看了不少开源的日历,很多一旦重度使用,就会出现性能问题,也有的代码重复率太高了,周历和月历的代码几乎80%都是重复的,一旦改动月历,周历也得跟着改。所以对于重度使用的日历,就需要自己写了。

先来看看我们需要的效果:

14957105595303.gif

我们的目标是:月视图和周视图可以切换

月视图左右滑动切换一个月,周视图左右滑动切换一周````````````````

月视图可以指定是否显示节假日和农历

月视图可以指定是否自动根据当月天数设置总行数

月视图可以指定起始日期,比如从每月5日开始算,那么显示的这个个月的日期就是当月5日到下个月4日。

月视图可以根据数据大小显示波浪图(三阶贝塞尔曲线)

手指往上滑可以切换为周视图,继续上滑可以隐藏日历,显示汇总数据

基本实现思路

布局

1.最外层:日历和日历下方的内容都放在一个Layout容器里面,在这个容器里处理各种滑动事件。

2.中间层:日历放在一个ViewPager中,可以左右滑动切换

3.最内层:根据经验,日历视图如果采用layout文件,那么将会inflate几十次layout,性能将会非常差,如果采用RecycleView,做成几十个格子,也是需要inflate几十次的,性能上也不行。所以,只能手动绘制,缺点是跟layout文件比起来,没有layout布局方便,需要手动绘制,优点是性能很好。

结构

结构上我们尽量增加代码复用,减少重复的代码。在日历视图和ViewPager,通过类型判断当前是周视图还是月视图。

采用MVP模式,分离视图的显示和数据的加载

日历数据

使用List存储日历上的数据,遍历这个list,依次绘制出整个页面。每个日历格子需要的数据都存放在一个DaySumInfo对象中,根据这个对象的属性绘制相应的日期和其他数据。

我们需要一个日期数据中心,用来缓存日期数据,存放全局变量(比如当前页面选中的日期,这个是多个类共用的)。如果日历需要显示自定义的数据的话,还需要一个APP数据中心,用来缓存需要显示在日历中的APP数据。

我们统一采用Calendar对象作为日历的日期标识。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐