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日历开发:按月显示和按周显示滑动切换]
相关文章推荐
- Android网络开发详解
- Android应用开发详解
- Android网络开发详解具体应用代码
- Android_SDK2.2_开发环境详解
- (详解)Eclipse3.6搭建 Android 2.2 开发环境
- android 条码识别软件开发全解析(续1详解)
- Android系统原理及开发要点详解
- 【Android游戏开发之八】游戏中添加音频-详解MediaPlayer与SoundPool的利弊以及各个在游戏中的用途!
- 【Android游戏开发十二】(保存游戏数据 [上文])详解SharedPreference 与 FIleInputStream/FileOutputStream将数据存储到SD卡中!
- 【Android游戏开发之八】游戏中添加音频-详解MediaPlayer与SoundPool的利弊以及各个在游戏中的用途!
- 【Android游戏开发十三】(保存游戏数据 [下文])详解SQLite存储方式,并把SQLite的数据库文件存储在SD卡中!!!
- 【Android游戏开发十三】(保存游戏数据 [下文])详解SQLite存储方式
- 【Android2D游戏开发十六】(上文之触摸屏手势)详解Android Gesture 手势操作!利用手势实现一个简单切换图片的功能!
- Android游戏开发之旅(三)View类详解
- Android 应用开发详解 热销中
- 【Android游戏开发十二】详解SharedPreference 与 FIleInputStream/FileOutputStream将数据存储到SD卡中!
- 实例详解快捷搭建Android手机开发平台
- 【Android游戏开发之八】游戏中添加音频-详解MediaPlayer与SoundPoo!并讲解两者的区别和游戏中的用途!
- Android系统原理及开发要点详解
- Android 应用开发详解 热销中