public void CreateCalendar() { if (MeasuredWidth == 0) { return; } var metrics = Resources.System.DisplayMetrics; var dayCount = 999; var originalDayCount = 999; RemoveAllViews(); bool isCalendarEnabled = true; _maxDaysOnBar = (int)Math.Floor( (double)Utils.ConvertPixelsToDp(MeasuredWidth, Context) / CalendarBarDayView.CALENDAR_DAY_WIDTH ); originalDayCount = (int)(_endDate - _originalStartDate).TotalDays + 1; dayCount = (int)(_endDate - _startDate).TotalDays + 1; isCalendarEnabled = originalDayCount > _maxDaysOnBar; if (isCalendarEnabled) { _maxDaysOnBar = (int)Math.Floor( (double)(Utils.ConvertPixelsToDp(MeasuredWidth, Context) - CALENDAR_MORE_SECTION_MIN_WIDTH) / CalendarBarDayView.CALENDAR_DAY_WIDTH ); } int daysOnBar = (int)Math.Min(_maxDaysOnBar, dayCount); CalendarBarDayView calendarBarDay; DateTime currentDate; for (int i = 0; i < daysOnBar; i++) { currentDate = _startDate.AddDaysSafe(i).Date; calendarBarDay = AddDay(currentDate); if (calendarBarDay.IsSelected) { _selectedCalendarBarDay = calendarBarDay; } } if (isCalendarEnabled) { AddMoreDaysSection(); } if (_calendarMoreButton != null) { _calendarMoreButton.SetTextColor(TextColor); _calendarMoreButton.Text = CultureInfo.CurrentCulture.DateTimeFormat.GetAbbreviatedMonthName(_selectedDate.Month).ToUpper(); } }
public void OnDateSet(DatePicker view, int year, int month, int dayOfMonth) { //var selectedDateYear = _selectedDate.Year; _selectedDate = DateTimeExtensions.CreateValidDate(year, month + 1, dayOfMonth); //if (selectedDateYear != year) //{ // return; //} var dayCount = (int)(_endDate - _selectedDate).TotalDays + 1; if (dayCount > _maxDaysOnBar) { _startDate = _selectedDate; } else { _startDate = _endDate.AddDaysSafe(-_maxDaysOnBar + 1); } DayChanged?.Invoke(this, new CalendarBarEventArgs() { Date = _selectedDate, Source = DateSelectionSource.Calendar }); RequestLayout(); }