CalendarView icon indicating copy to clipboard operation
CalendarView copied to clipboard

请问在周视图中,怎么直接切换到上个月、下个月呢?

Open wangdadao2012 opened this issue 4 years ago • 3 comments

请问在周视图中,有api可以直接切换到上个月、下个月的周视图吗?

wangdadao2012 avatar Mar 26 '21 03:03 wangdadao2012

滚动到上一个月com.haibin.calendarview.CalendarView#scrollToPre()

滚动到下一个月com.haibin.calendarview.CalendarView#scrollToNext()

angcyo avatar Oct 21 '21 02:10 angcyo

滚动到上一个月com.haibin.calendarview.CalendarView#scrollToPre()

滚动到下一个月com.haibin.calendarview.CalendarView#scrollToNext() 这个在月视图下没有问题,在周视图下,是切换到上、下周

wangdadao2012 avatar Oct 22 '21 10:10 wangdadao2012

周视图直接滚动到上一个月下一个月

上一个月

int currentItem = mWeekPager.getCurrentItem();
BaseView baseView = mWeekPager.findViewWithTag(currentItem);
Calendar firstCalendar = baseView.mItems.get(0);
int days = CalendarUtil.getMonthDaysCount(firstCalendar.getYear(), firstCalendar.getMonth());
Calendar targetCalendar = CalendarUtil.getCalendarWidthDiffer(firstCalendar, - days * ONE_DAY);
mWeekPager.scrollToCalendar(targetCalendar.getYear(), targetCalendar.getMonth(), targetCalendar.getDay(), smoothScroll, false);

下一个月

int currentItem = mWeekPager.getCurrentItem();
BaseView baseView = mWeekPager.findViewWithTag(currentItem);
Calendar firstCalendar = baseView.mItems.get(0);
int days = CalendarUtil.getMonthDaysCount(firstCalendar.getYear(), firstCalendar.getMonth());
Calendar targetCalendar = CalendarUtil.getCalendarWidthDiffer(firstCalendar, days * ONE_DAY);
mWeekPager.scrollToCalendar(targetCalendar.getYear(), targetCalendar.getMonth(), targetCalendar.getDay(), smoothScroll, false);

工具类

/**
 * 获取指定相差天数的日历
 * [millis] 相差的毫秒数
 * */
public static Calendar getCalendarWidthDiffer(Calendar calendar, long millis) {
    java.util.Calendar date = java.util.Calendar.getInstance();

    date.set(calendar.getYear(), calendar.getMonth() - 1, calendar.getDay(), 12, 0, 0);//

    long timeMills = date.getTimeInMillis();//获得起始时间戳

    date.setTimeInMillis(timeMills + millis);

    Calendar preCalendar = new Calendar();
    preCalendar.setYear(date.get(java.util.Calendar.YEAR));
    preCalendar.setMonth(date.get(java.util.Calendar.MONTH) + 1);
    preCalendar.setDay(date.get(java.util.Calendar.DAY_OF_MONTH));

    return preCalendar;
}

angcyo avatar Oct 22 '21 11:10 angcyo