前言

公司项目需要做一个签到送积分的系统,要求app实现这种签到功能。先在网上找了一些资料,有些用自定义View画图实现,其实对于普通码农对绘图会没耐心看各自算法。所以自己动手撸一个通用型日历,使用ViewPager+Releteview+Calendar+算法实现。想着这次也为了以后做其他项目中能用到,因为真心觉得很实用。

gitHup源码地址:https://github.com/aiyangtianci/aiyang_canary

效果图:

目录

前言

一、Calendar类(关键)

二、BaseAdapter中做数据

三、总结


一、Calendar类(关键)

一款日历App,肯定少不了要用到 Calendar类。

public class SpecialCalendar {/*** 判断是否是闰年*/public boolean isLeapYear(int year){if (year % 100 == 0 && year % 400 == 0){return true;}else if (year % 100 != 0 && year % 4==0){return true;}return false;}/*** 得到某月多少天* 哈哈少儿口诀:1357810腊三十一天永不差,469冬三十日平年二月28,闰年再把一天加。*/public int getDaysOfMonth(boolean isLeapYear,int month){int days=0;switch (month){case 1:case 3:case 5:case 7:case 8:case 10:case 12:days=31;break;case 4:case 6:case 9:case 11:days=30;break;case 2:if (isLeapYear){days=29;}else{days=28;}}return days;}/*** 得到某年某月一号是星期几  (0-6 日-六)*/public int getWeekdayOfMonth( int mYear, int mMonth){Calendar cal=Calendar.getInstance();cal.set(mYear,mMonth,1);return cal.get(Calendar.DAY_OF_WEEK)-1;}
}

二、BaseAdapter中做数据

1、先在activity中初始化一下下小数据:

Calendar calendar=Calendar.getInstance();mYear = calendar.get(Calendar.YEAR); // 获取当前年份mMonth = calendar.get(Calendar.MONTH) ;// 获取当前月份以(0开头)mDay = calendar.get(Calendar.DAY_OF_MONTH) ;// 获取当前天以(0开头)SpecialCalendar mCalendar=new SpecialCalendar();//创建自己写的日历类 获取某月总天数 和 一号是星期几boolean isLeapYear =mCalendar.isLeapYear(mYear);int mDays=mCalendar.getDaysOfMonth(isLeapYear,mMonth+1);int week =mCalendar.getWeekdayOfMonth(mYear,mMonth);adapter=new RegistrationAdapter(this,mDays,week,mDay);//适配器带参构造实现Calendar calendar=Calendar.getInstance();mYear = calendar.get(Calendar.YEAR); // 获取当前年份mMonth = calendar.get(Calendar.MONTH) ;// 获取当前月份以(0开头)mDay = calendar.get(Calendar.DAY_OF_MONTH) ;// 获取当前天以(0开头)SpecialCalendar mCalendar=new SpecialCalendar();//创建自己写的日历类 获取某月总天数 和 一号是星期几boolean isLeapYear =mCalendar.isLeapYear(mYear);int mDays=mCalendar.getDaysOfMonth(isLeapYear,mMonth+1);int week =mCalendar.getWeekdayOfMonth(mYear,mMonth);adapter=new RegistrationAdapter(this,mDays,week,mDay);//适配器带参构造实现

2、适配器关键的小小算法:

    private final int days;private final int week;private int[] dayNumber;private final int day;/*** 得到42格子 每一格子的值*/private void getEveryDay(){dayNumber=new int[42];//总共42个方块格子 for (int i=0;i<42;i++){if (i < days+week && i >= week){//这么解释:第一行共7格子和星期的7天 做计算 i>=week 意思是从第一个方块格开始往dayNumber里放几号dayNumber[i]=i-week+1;}else{dayNumber[i]=0;//不是这个月内每一号1..10..31所赋值的,则全部赋值为0  ;方便点击时判断值是不是为0,是的话说明点的空白格子了  }}}

三、总结

代码很简单,思路也很容易理解。如果不懂也没关系,可以直接进群或留言,我会耐心解答。

可以根据你们公司的“产品”设计图的具体业务逻辑去扩展实现,~~ 总之,核心代码就是以上部分 。

如果看官们懒得手打代码,当然也可以下载的我的签到demo,这样使用时代码可以直接复制到实际项目中。

没有积分下载的朋友可以加群索要,欢迎入群!

demo源码免费下载。

相关资料推荐:

Java/Android 日期格式SimpleDateFormat转换,以及Date和Calendar的使用

Android 签到打卡日历,自定义日期可带图标(附源码)相关推荐

  1. Winforn中实现ZedGraph自定义添加右键菜单项(附源码下载)

    场景 Winform中实现ZedGraph中曲线右键显示为中文: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100115292 ...

  2. Android 小项目之--数据存储【Files】(附源码)

    继上篇数据存储,现在我们来讲讲另外一种数据存储,Files.本篇讲述步骤如下: 1.温故而知新,复习四种数据存储的区别. 2.什么是 Files 数据存储. 3.什么是 Properties ? 4. ...

  3. Android简单、高性能的高斯模糊(毛玻璃)效果(附源码)

    毛玻璃效果相信很多朋友都眼红很久了, 隔壁ios系统对高斯模糊早就大范围使用了, 咱们Android却丝毫不为所动, 于是就只能靠广大开发者咯. 这是目前市面上性能最高的方案, 也不知道最初是哪位大神 ...

  4. Android使用xml自定义软键盘效果(附源码)

    Android使用xml自定义软键盘效果原理: 1,软键盘其实是个控件,使用android.inputmethodserver.KeyboardView类定义. 2,主布局中使用帧布局,当我们需要显示 ...

  5. Android开发之使用TabLayout快速实现选项卡切换功能(附源码下载)

    看下效果图: 先看下布局: TabLayout的简单使用: 当选项卡过少时候设置填充全屏app:tabGravity="fill"设置下面切换选项卡的小滑片颜色app:tabInd ...

  6. Android APP:Preference使用详解和实例(附源码)

    Android APP:Preference使用详解和实例 一.Preference 是Android app中重要的控件之一,Settings 模块大部分都是通过Preference 实现的,这里将 ...

  7. 用python+pygame模块实现一波刮刮卡效果,图像处理之路(附源码)

    前言 利用python模拟了刮开刮刮卡效果,让我们愉快地开始吧~ 效果展示 开发工具 Python版本: 3.6.4 相关模块: pygame模块: 以及一些python自带的模块. 环境搭建 安装P ...

  8. android tesseract-ocr实例教程(包含中文识别)(附源码)

    (转载请注明出处:http://blog.csdn.net/buptgshengod) ps:鉴于大家对这个项目这么感兴趣,问题也比较多,我简单的再说几点. 1.我只是使用了这个ocr引擎,算法什么的 ...

  9. Android 小项目之--数据存储【Network】(附源码)

    将数据保存发送到电子邮件中备份,首要前提应该先在模拟器中设置好电子邮件帐户,设置如下: 第一步,启动模拟器,打开"菜单",选择"电子邮件"项,填写相应帐号和密码 ...

最新文章

  1. mkisofs简单定制linux iso
  2. java实现条件编译
  3. k8s之CRD定义map[string]interface{}类型
  4. Modbus协议栈开发笔记之五:Modbus RTU Slave开发
  5. linux系统 date命令,linux系统 的 date命令
  6. 在 Unity 多人游戏中实现语音对话
  7. 社群模式:什么是普通人赚钱的核心秘密
  8. 颜色空间——Gamma与线性颜色空间
  9. nbi可视化_教您通过NBI大数据可视化工具零编码轻松实现桑基图的制作
  10. 关闭迅雷首页播放视频的方法
  11. unity去掉物体的阴影
  12. php中文歌词,pr怎么导入歌词字幕
  13. 最新声音鉴定鉴卡引流神器PHP源码
  14. C语言:使用函数统计指定数字的个数
  15. 大数据 与 云计算 的关系
  16. Quartus-II入门实战
  17. axure灯箱效果_将时尚的灯箱效果添加到WordPress画廊
  18. SendGrid -- Stressful Subject
  19. 《大象--Thinking in UML 第二版》已于近日在当当首发,同时邀请各位加入新浪微博[大象-thinkinginUml群]:http://q.weibo.com/1483929
  20. 树莓派卸载系统自带应用增大硬盘空间

热门文章

  1. Kotlin use函数的魔法
  2. 中国果汁饮料行业营销状况与竞争趋势预测报告(2022-2027年)
  3. Mina MEID Activator 2.120210512更新使用说明支持三网(移动、联通、电信)国行版手机解锁打电话4G苹果手机激活锁停用Hello密码锁绕ID屏幕锁密码
  4. ai怎么渐变颜色_AI里面怎么弄渐变色,哪位高手指点下啊?
  5. javaEE开发如何在oracle官网下载安装jdk?(java SE 8u5 JDK 和 Java EE 7 SDK with JDK 7 U45的区别 )
  6. 接收字符大写转化为对应的小写
  7. mybatis-plus 注解 通过中间表进行一对多、多对多查询(三表)
  8. 万字长文简单明了的介绍xxl-job以及quartz
  9. 1737 - 满足三条件之一需改变的最少字符数 - 枚举 - 贪心
  10. 小红的签到题 (shui