效果預(yù)覽

image
思路:
1、RecyclerView+Calendar
2、Calendar獲取整月的天數(shù)
3、Calendar獲取上一個月和下一個月需要補(bǔ)全的天數(shù)
1、Calendar獲取整月的天數(shù)
Calendar instance = Calendar.getInstance();
if (indexDate != null) {
//自定月份
instance.setTime(indexDate.getDate());
}
//獲取當(dāng)前月最大的日期
int maxDate = instance.getActualMaximum(Calendar.DATE);
instance.set(Calendar.DAY_OF_MONTH, 1);
//獲取當(dāng)前月所有的天數(shù)
for (int i = 0; i < maxDate; i++, instance.add(Calendar.DATE, 1)) {
int day = instance.get(Calendar.DAY_OF_MONTH);
CalendarBean calendarBean = new CalendarBean();
calendarBean.setDay(String.valueOf(day));
calendarBean.setDate(instance.getTime());
mDatas.add(calendarBean);
}
2、獲取上一個月需要補(bǔ)全的天數(shù)
private ArrayList<CalendarBean> getLastMonth(CalendarBean calendarBean) {
//獲取當(dāng)前月第一天
Calendar calendarFirstDay = Calendar.getInstance();
calendarFirstDay.setTime(calendarBean.getDate());
calendarFirstDay.set(Calendar.DAY_OF_MONTH, 1);
//當(dāng)月第一天是星期幾
int firstDayOfWeek = calendarFirstDay.get(Calendar.DAY_OF_WEEK);
if (firstDayOfWeek != 1) {
/**
* firstDayOfWeek =1時,就是星期日,當(dāng)前月第一天已經(jīng)處于星期日,不需要添加上一個月補(bǔ)充天數(shù)
*/
//需要補(bǔ)全的天數(shù),當(dāng)needAdd為負(fù)數(shù)時候,說明是星期日,需要補(bǔ)6天
int needAdd = firstDayOfWeek - 1;
ArrayList<CalendarBean> lastMonth = new ArrayList<>();
for (int i = 0; i < needAdd; i++) {
CalendarBean dayBean = new CalendarBean();
//0:當(dāng)月,1:上月,2:下一個月
dayBean.setDayType(1);
dayBean.setWeekOfDay(getWeekString(i));
//取出上一個月需要補(bǔ)全的天數(shù)
//calendarFirstDay.set(Calendar.DAY_OF_MONTH, 0 - i);
calendarFirstDay.add(Calendar.DATE, -1);
//上一個月的天數(shù)
int lastMonthDay = calendarFirstDay.get(Calendar.DAY_OF_MONTH);
dayBean.setDay(String.valueOf(lastMonthDay));
dayBean.setDate(dayBean.getDate());
lastMonth.add(0, dayBean);
}
return lastMonth;
}
return new ArrayList<>();
}
3、獲取下一個月需要補(bǔ)全的天數(shù)
private ArrayList<CalendarBean> getNextMonth(CalendarBean calendarBean) {
//獲取當(dāng)前月最后一天
Calendar calendarLastDay = Calendar.getInstance();
calendarLastDay.setTime(calendarBean.getDate());
calendarLastDay.add(Calendar.MONTH, 1);
calendarLastDay.set(Calendar.DAY_OF_MONTH, 0);
//獲取當(dāng)前月最后一天是星期幾
int nextDayOfWeek = calendarLastDay.get(Calendar.DAY_OF_WEEK);
if (nextDayOfWeek != 7) {
/**
* nextDayOfWeek =7時,就是星期六,當(dāng)前月最后一天已經(jīng)處于星期六,不需要添加上一個月補(bǔ)充天數(shù)
*/
int needAdd = 7 - nextDayOfWeek;
ArrayList<CalendarBean> nextMonth = new ArrayList<>();
for (int i = 1; i <= needAdd; i++) {
CalendarBean dayBean = new CalendarBean();
//0:當(dāng)月,1:上月,2:下一個月
dayBean.setDayType(2);
dayBean.setWeekOfDay(getWeekString(i));
//取出上一個月需要補(bǔ)全的天數(shù)
calendarLastDay.set(Calendar.DAY_OF_MONTH, i);
//上一個月的天數(shù)
int lastMonthDay = calendarLastDay.get(Calendar.DAY_OF_MONTH);
dayBean.setDay(String.valueOf(lastMonthDay));
dayBean.setDate(dayBean.getDate());
nextMonth.add(dayBean);
}
return nextMonth;
}
return new ArrayList<>();
}