您的位置:首页 > 移动开发 > Android开发

Android日历开发详解

2017-08-18 10:15 295 查看

Android日历开发详解

Android日历开发详解
基本实现思路
布局

结构

日历数据

Android日历开发日期工具类TimeUtils

Android日历开发日历显示需要准备哪些数据

Android日历开发使用Canvas绘制按周显示和按月显示的日历

Android日历开发按月显示和按周显示滑动切换

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

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



我们的目标是:

月视图和周视图可以切换

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

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

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

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

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

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

基本实现思路

布局

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

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

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

结构

结构上我们尽量增加代码复用,减少重复的代码。

在日历视图和ViewPager,通过类型判断当前是周视图还是月视图。

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

日历数据

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

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

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

Android日历开发:日期工具类TimeUtils

Android日历开发:日历显示需要准备哪些数据

[Android日历开发:使用Canvas绘制按周显示和按月显示的日历]

[Android日历开发:按月显示和按周显示滑动切换]

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐