-
Notifications
You must be signed in to change notification settings - Fork 315
自定义日历UI
yannecer edited this page Jul 4, 2024
·
7 revisions
日历自定义适用于月日历、周日历和折叠日历
自定义有两种方式,实现CalendarPainter接口绘制和继承CalendarAdapter绑定数据
综合而言,实现CalendarPainter接口的效率比较高
自定义说明:
CalendarPainter:每个月份的数据包含上个月的几天,下个月的几天和当月的30天左右,
一个月份页面的日期数量是35或42个,代码内部通过循环,得到每一块的位置、日期等元素,
通过CalendarPainter接口提供出来,可以用于绘制不同的效果,本库库代码中InnerPainter实现了
CalendarPainter接口,是日历的默认实现模式
CalendarAdapter:则是首先会获取一个CalendarItemView,每一个日期的位置上都有一个CalendarItemView,
通过不用的日期,不同的条件,绑定不同数据,显示不同的效果,demo中有相关实现代码
/**
* 绘制今天的日期
*
* @param canvas 画布
* @param rectF 今天日期的位置矩形
* @param localDate 今天的日期
* @param checkedDateList 所有选中日期的集合,
* 单选模式中,集合中最多只有一个元素,
* 多选模式中,可以有多个元素
*/
void onDrawToday(Canvas canvas, RectF rectF, LocalDate localDate, List<LocalDate> checkedDateList);
/**
* 绘制当前月或周的日期
*
* @param canvas 画布
* @param rectF 日期的位置矩形
* @param localDate 月日历-> 当前页面月份中的每个日期(内部是循环处理)
* 周日历-> 当前页面一周中的每个日期(内部是循环处理)
* @param checkedDateList 所有选中日期的集合,
* 单选模式中,集合中最多只有一个元素,
* 多选模式中,可以有多个元素
*/
void onDrawCurrentMonthOrWeek(Canvas canvas, RectF rectF, LocalDate localDate, List<LocalDate> checkedDateList);
/**
* 绘制上一月,下一月的日期,周日历不用实现
*
* @param canvas 画布
* @param rectF 日期的位置矩形
* @param localDate 月日历-> 当前页面上一月、下一月中的每个日期(内部是循环处理)
* 周日历-> 周日历无需实现此方法
* @param checkedDateList 所有选中日期的集合,
* 单选模式中,集合中最多只有一个元素,
* 多选模式中,可以有多个元素
*/
void onDrawLastOrNextMonth(Canvas canvas, RectF rectF, LocalDate localDate, List<LocalDate> checkedDateList);
/**
* 绘制不可用的日期,和方法setDateInterval(startFormatDate, endFormatDate)对应,
* 如果没有使用setDateInterval设置日期范围 此方法不用实现
*
* @param canvas 画布
* @param rectF 日期的位置矩形
* @param localDate 不可用的日期
*/
default void onDrawDisableDate(Canvas canvas, RectF rectF, LocalDate localDate) {
}