手把手教你最快撸一个日历控件

我们的态度是:每天进步一点点,理想终会被实现。

前言

可能很多人都会说,你还自己撸一个日历控件,GitHub有那么多好的开源项目,比如:material-calendarview(https://github.com/prolificinteractive/material-calendarview)4K多的star,而且人家的扩展性也很强,我干嘛要自己撸。我就是个不喜欢用别人的,想着别人能做出来的,自己干嘛不能做出来,再说要是后面的需求越改越多,要是满足不了了,那我们该怎么办?这时就需要我们自己撸了。

还有种情况就是,当我们在赶项目的时候,可能项目初期只需要一个基本的日历控件,其他的暂时用不上,需要我们快速的撸一个。这个时候就派上用场了,教你最快的撸一个日历控件。

看看我们几分钟实现的效果:

Calender日历控件

分析

自定义View的实现方式一般就三种:

继承系统控件

组合系统控件

自定义绘制控件

具体这三种方式的详细我就不讲了,不清楚的小伙伴可以查看:

HenCoder Android 自定义 View 1-6: 属性动画(上手篇)(https://juejin.im/post/59af4b415188252427260c3d)

【HenCoder Android 开发进阶】自定义 View 1-7:属性动画(进阶篇)(https://juejin.im/post/59b5fe19f265da06710d8116)

既然我们讲的是快速构建一个日历控件,我们就不完全采用第三种方式绘制。我们主要采用组合系统控件

分析需求

我们看下面这张图来分析:

从图中我们看出,我们将日历分为三个部分:

第一部分:左右箭头,年月显示

第二部分:星期几

第三部分:日历显示

这里我采用ConstrainLayout约束布局来讲这个布局显示出来,代码如下:

界面效果:

基本界面就已经搭建完成了。我们要简单快速的实现日历,我们的日历采用的GridView控件来显示,不熟悉GridView的老铁可以先搜索学习下。

处理业务逻辑

这里最核心的业务逻辑:

计算当前月份的第一天星期几

计算当前月份第一天前还要显示上个月几天

计算要显示下个月几天

那么具体代码如下:

细心的朋友可能看到了MyTextView,这个是自定义的TextView,为当天的日期画个红色的圈,代码如下:

最后使用就只需要的在XML中添加我们的自定义的MyCalendar即可:

这样就大功告成了,我们可以看到非常简单的自定义View显示日历就完成了,代码量很少,而且思路很清晰,很适合快速的开发。

这里还没有补充的就是那就是:比如箭头的图片、年月的显示格式颜色大小、星期几的文字颜色大小等这些都是默认,加入后期开发的时候要求可以改变,那么我们就在values文件下创建attrs的xml文件,配置相应的属性即可。

自己撸一个和用别人的东西还是不一样的感觉,至少我是这么认为的。

demo已经上传到github:https://github.com/lt13982250340/MyCalender

一句话总结

本文旨在快速的开发一个日历控件,比如GridView可以换成我们常用的recyclerview,这些都是后期再优化的细节。熟悉API或者流程的话,估计几分钟就可以撸一个日历控件。

在这个基础上再改造,就能得到你想要的效果,符合产品的需求。

温馨提示:

备注一下“加群

另外公众号还有一些个人收藏的视频:

关注我,一定会有意想不到的东西等你:

每天专注分享Android、JAVA干货

备注:程序圈LT

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180601G09GDU00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励