Skip to content

自定义日历UI

yannecer edited this page Jul 4, 2024 · 7 revisions

自定义日历UI

日历自定义适用于月日历、周日历和折叠日历
自定义有两种方式,实现CalendarPainter接口绘制和继承CalendarAdapter绑定数据
综合而言,实现CalendarPainter接口的效率比较高

自定义说明:
CalendarPainter:每个月份的数据包含上个月的几天,下个月的几天和当月的30天左右,
一个月份页面的日期数量是35或42个,代码内部通过循环,得到每一块的位置、日期等元素,
通过CalendarPainter接口提供出来,可以用于绘制不同的效果,本库库代码中InnerPainter实现了
CalendarPainter接口,是日历的默认实现模式

CalendarAdapter:则是首先会获取一个CalendarItemView,每一个日期的位置上都有一个CalendarItemView,
通过不用的日期,不同的条件,绑定不同数据,显示不同的效果,demo中有相关实现代码

CalendarPainter接口

    /**
     * 绘制今天的日期
     *
     * @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) {

    }

Clone this wiki locally