public void setRangeDates(CalendarDay min, CalendarDay max) { this.minDate = min; this.maxDate = max; for (MonthView monthView : currentViews) { monthView.setMinimumDate(min); monthView.setMaximumDate(max); } if (min == null) { Calendar worker = CalendarUtils.getInstance(); worker.add(Calendar.YEAR, -200); min = CalendarDay.from(worker); } if (max == null) { Calendar worker = CalendarUtils.getInstance(); worker.add(Calendar.YEAR, 200); max = CalendarDay.from(worker); } rangeIndex = new DateRangeIndex(min, max); CalendarDay prevDate = selectedDate; notifyDataSetChanged(); setSelectedDate(prevDate); if (prevDate != null) { if (!prevDate.equals(selectedDate)) { callbacks.onDateChanged(selectedDate); } } }
public int getIndexForDay(CalendarDay day) { if (day == null) { return getCount() / 2; } if (minDate != null && day.isBefore(minDate)) { return 0; } if (maxDate != null && day.isAfter(maxDate)) { return getCount() - 1; } return rangeIndex.indexOf(day); }
private CalendarDay getValidSelectedDate(CalendarDay date) { if (date == null) { return null; } if (minDate != null && minDate.isAfter(date)) { return minDate; } if (maxDate != null && maxDate.isBefore(date)) { return maxDate; } return date; }
/** @param calendar set the maximum selectable date, null for no maximum */ public void setMaximumDate(@Nullable Calendar calendar) { setMaximumDate(CalendarDay.from(calendar)); }
/** @param date set the maximum selectable date, null for no maximum */ public void setMaximumDate(@Nullable Date date) { setMaximumDate(CalendarDay.from(date)); }
/** @param date a Date to focus the calendar on. Null will do nothing */ public void setCurrentDate(@Nullable Date date) { setCurrentDate(CalendarDay.from(date)); }
/** @param calendar a Calendar set to a day to focus the calendar on. Null will do nothing */ public void setCurrentDate(@Nullable Calendar calendar) { setCurrentDate(CalendarDay.from(calendar)); }
/** @param date a Date to set as selected. Null to clear selection */ public void setSelectedDate(@Nullable Date date) { setSelectedDate(CalendarDay.from(date)); }
/** @param calendar a Calendar set to a day to select. Null to clear selection */ public void setSelectedDate(@Nullable Calendar calendar) { setSelectedDate(CalendarDay.from(calendar)); }
public MaterialCalendarView(Context context, AttributeSet attrs) { super(context, attrs); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { // If we're on good Android versions, turn off clipping for cool effects setClipToPadding(false); setClipChildren(false); } else { // Old Android does not like _not_ clipping view pagers, we need to clip setClipChildren(true); setClipToPadding(true); } buttonPast = new DirectionButton(getContext()); title = new TextView(getContext()); buttonFuture = new DirectionButton(getContext()); pager = new ViewPager(getContext()); setupChildren(); title.setOnClickListener(onClickListener); buttonPast.setOnClickListener(onClickListener); buttonFuture.setOnClickListener(onClickListener); titleChanger = new TitleChanger(title); titleChanger.setTitleFormatter(DEFAULT_TITLE_FORMATTER); adapter = new MonthPagerAdapter(); adapter.setTitleFormatter(DEFAULT_TITLE_FORMATTER); pager.setAdapter(adapter); pager.setOnPageChangeListener(pageChangeListener); pager.setPageTransformer( false, new ViewPager.PageTransformer() { @Override public void transformPage(View page, float position) { position = (float) Math.sqrt(1 - Math.abs(position)); page.setAlpha(position); } }); adapter.setCallbacks(monthViewCallbacks); TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.MaterialCalendarView, 0, 0); try { int tileSize = a.getDimensionPixelSize(R.styleable.MaterialCalendarView_mcv_tileSize, -1); if (tileSize > 0) { setTileSize(tileSize); } setArrowColor(a.getColor(R.styleable.MaterialCalendarView_mcv_arrowColor, Color.BLACK)); Drawable leftMask = a.getDrawable(R.styleable.MaterialCalendarView_mcv_leftArrowMask); if (leftMask == null) { leftMask = getResources().getDrawable(R.drawable.mcv_action_previous); } setLeftArrowMask(leftMask); Drawable rightMask = a.getDrawable(R.styleable.MaterialCalendarView_mcv_rightArrowMask); if (rightMask == null) { rightMask = getResources().getDrawable(R.drawable.mcv_action_next); } setRightArrowMask(rightMask); setSelectionColor( a.getColor( R.styleable.MaterialCalendarView_mcv_selectionColor, getThemeAccentColor(context))); CharSequence[] array = a.getTextArray(R.styleable.MaterialCalendarView_mcv_weekDayLabels); if (array != null) { setWeekDayFormatter(new ArrayWeekDayFormatter(array)); } array = a.getTextArray(R.styleable.MaterialCalendarView_mcv_monthLabels); if (array != null) { setTitleFormatter(new MonthArrayTitleFormatter(array)); } setHeaderTextAppearance( a.getResourceId( R.styleable.MaterialCalendarView_mcv_headerTextAppearance, R.style.TextAppearance_MaterialCalendarWidget_Header)); setWeekDayTextAppearance( a.getResourceId( R.styleable.MaterialCalendarView_mcv_weekDayTextAppearance, R.style.TextAppearance_MaterialCalendarWidget_WeekDay)); setDateTextAppearance( a.getResourceId( R.styleable.MaterialCalendarView_mcv_dateTextAppearance, R.style.TextAppearance_MaterialCalendarWidget_Date)); setShowOtherDates(a.getBoolean(R.styleable.MaterialCalendarView_mcv_showOtherDates, false)); int firstDayOfWeek = a.getInt(R.styleable.MaterialCalendarView_mcv_firstDayOfWeek, -1); if (firstDayOfWeek < 0) { firstDayOfWeek = CalendarUtils.getInstance().getFirstDayOfWeek(); } setFirstDayOfWeek(firstDayOfWeek); } catch (Exception e) { e.printStackTrace(); } finally { a.recycle(); } currentMonth = CalendarDay.today(); setCurrentDate(currentMonth); if (isInEditMode()) { removeView(pager); MonthView monthView = new MonthView(context, currentMonth, getFirstDayOfWeek()); monthView.setSelectionColor(getSelectionColor()); monthView.setDateTextAppearance(adapter.getDateTextAppearance()); monthView.setWeekDayTextAppearance(adapter.getWeekDayTextAppearance()); monthView.setShowOtherDates(getShowOtherDates()); addView(monthView, new LayoutParams(MonthView.DEFAULT_MONTH_TILE_HEIGHT)); } }