Android Calendar自定义日历控件

效果预览

Android Calendar自定义日历控件_第1张图片

image

思路:

1、RecyclerView+Calendar2、Calendar获取整月的天数3、Calendar获取上一个月和下一个月需要补全的天数

1、Calendar获取整月的天数

Calendarinstance=Calendar.getInstance();if(indexDate!=null){//自定月份instance.setTime(indexDate.getDate());}//获取当前月最大的日期intmaxDate=instance.getActualMaximum(Calendar.DATE);instance.set(Calendar.DAY_OF_MONTH,1);//获取当前月所有的天数for(inti=0;i

2、获取上一个月需要补全的天数

privateArrayListgetLastMonth(CalendarBeancalendarBean){//获取当前月第一天CalendarcalendarFirstDay=Calendar.getInstance();calendarFirstDay.setTime(calendarBean.getDate());calendarFirstDay.set(Calendar.DAY_OF_MONTH,1);//当月第一天是星期几intfirstDayOfWeek=calendarFirstDay.get(Calendar.DAY_OF_WEEK);if(firstDayOfWeek!=1){/**

            *  firstDayOfWeek =1时,就是星期日,当前月第一天已经处于星期日,不需要添加上一个月补充天数

            *///需要补全的天数,当needAdd为负数时候,说明是星期日,需要补6天intneedAdd=firstDayOfWeek-1;ArrayListlastMonth=newArrayList<>();for(inti=0;i();}

3、获取下一个月需要补全的天数

privateArrayListgetNextMonth(CalendarBeancalendarBean){//获取当前月最后一天CalendarcalendarLastDay=Calendar.getInstance();calendarLastDay.setTime(calendarBean.getDate());calendarLastDay.add(Calendar.MONTH,1);calendarLastDay.set(Calendar.DAY_OF_MONTH,0);//获取当前月最后一天是星期几intnextDayOfWeek=calendarLastDay.get(Calendar.DAY_OF_WEEK);if(nextDayOfWeek!=7){/**

            *  nextDayOfWeek =7时,就是星期六,当前月最后一天已经处于星期六,不需要添加上一个月补充天数

            */intneedAdd=7-nextDayOfWeek;ArrayListnextMonth=newArrayList<>();for(inti=1;i<=needAdd;i++){CalendarBeandayBean=newCalendarBean();//0:当月,1:上月,2:下一个月dayBean.setDayType(2);dayBean.setWeekOfDay(getWeekString(i));//取出上一个月需要补全的天数calendarLastDay.set(Calendar.DAY_OF_MONTH,i);//上一个月的天数intlastMonthDay=calendarLastDay.get(Calendar.DAY_OF_MONTH);dayBean.setDay(String.valueOf(lastMonthDay));dayBean.setDate(dayBean.getDate());nextMonth.add(dayBean);}returnnextMonth;}returnnewArrayList<>();}

Demo地址

你可能感兴趣的:(Android Calendar自定义日历控件)