# huanghaibin-dev/calendarview

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/huanghaibin-dev-calendarview).**

9,383 stars · 1,840 forks · Java · Apache-2.0

## Links

- GitHub: https://github.com/huanghaibin-dev/CalendarView
- awesome-repositories: https://awesome-repositories.com/repository/huanghaibin-dev-calendarview.md

## Topics

`android` `calendar` `calendar-api` `calendar-component` `calendar-view` `calendar-widget` `calendarview`

## Description

CalendarView is a high-performance Android UI component designed for displaying dates and navigating chronological views. It functions as a canvas-based widget that utilizes direct drawing instead of standard list views to minimize memory usage and ensure fast rendering of complex date interfaces.

The component provides a programmable interface for switching between month, week, year, and lunar views. It differentiates itself through a pluggable customization system that allows developers to override the drawing logic for dates, text, event markers, and selection layouts.

The library supports multiple date selection modes, including single, multiple, and range-based picking, with the ability to restrict specific dates from being selectable. It includes integration for nested scrolling containers and tools for configuring structural parameters such as the starting day of the week.

## Tags

### Mobile Development

- [Android Calendar Views](https://awesome-repositories.com/f/mobile-development/android-calendar-views.md) — Provides a high-performance Android UI component for navigating and displaying monthly, weekly, and yearly calendar views.
- [Calendar UI Components](https://awesome-repositories.com/f/mobile-development/android-ecosystem/android-ui-components/calendar-ui-components.md) — Provides a high-performance Android UI component for displaying and navigating dates across various views.

### User Interface & Experience

- [Canvas-Based UI Rendering](https://awesome-repositories.com/f/user-interface-experience/canvas-based-ui-rendering.md) — Implements high-performance date rendering by drawing directly to the Android canvas instead of using standard view hierarchies.
- [Canvas-Based Implementations](https://awesome-repositories.com/f/user-interface-experience/custom-widget-frameworks/custom-widget-implementation/canvas-based-implementations.md) — Implements a canvas-based drawing system to ensure fast rendering and low memory overhead for complex date grids.
- [Date Pickers](https://awesome-repositories.com/f/user-interface-experience/date-pickers.md) — Implements a specialized date selection interface supporting single, multiple, or range-based picking.
- [Multi-Mode Date Selection](https://awesome-repositories.com/f/user-interface-experience/date-selection-components/multi-mode-date-selection.md) — Supports multiple selection modes, including single date, multiple dates, and contiguous date ranges. ([source](https://github.com/huanghaibin-dev/CalendarView/blob/master/QUESTION_ZH.md))
- [High-Performance Rendering](https://awesome-repositories.com/f/user-interface-experience/high-performance-rendering.md) — Uses Android Canvas rendering to efficiently handle complex grid layouts and maintain smooth scrolling performance.
- [Calendar Layout Rendering](https://awesome-repositories.com/f/user-interface-experience/programmatic-element-construction/android-view-lifecycle-tracking/custom-view-rendering/zoomable-view-rendering/calendar-layout-rendering.md) — A high-performance canvas rendering system for displaying dates in month, week, year, or lunar views. ([source](https://github.com/huanghaibin-dev/CalendarView/blob/master/QUESTION.md))
- [Range Selection](https://awesome-repositories.com/f/user-interface-experience/date-pickers/range-selection.md) — Provides a specialized UI for selecting a continuous span of time between two dates.
- [Calendar-Based Scheduling Interfaces](https://awesome-repositories.com/f/user-interface-experience/date-range-schedulers/calendar-based-scheduling-interfaces.md) — Provides a time-based navigation interface that allows users to jump between dates and switch layout views.
- [Date Blacklisting](https://awesome-repositories.com/f/user-interface-experience/date-range-schedulers/date-range-restrictions/date-blacklisting.md) — Allows blocking specific dates or ranges from being selectable using dynamic listeners or fixed boundaries. ([source](https://github.com/huanghaibin-dev/CalendarView/blob/master/QUESTION.md))
- [Android Nested Scrolling](https://awesome-repositories.com/f/user-interface-experience/scroll-interaction-handlers/scroll-state-controllers/scroll-observers/android-nested-scrolling.md) — Integrates with the Android nested scrolling framework to allow the calendar to reside within scrollable containers.
- [Grid-to-Date Mapping](https://awesome-repositories.com/f/user-interface-experience/touch-gesture-handlers/touch-event-processors/coordinate-to-translation-mapping/grid-to-date-mapping.md) — Converts raw touch coordinates into specific date objects using fixed cell dimension calculations.
- [Drawing Logic Overrides](https://awesome-repositories.com/f/user-interface-experience/ui-customization/drawing-logic-overrides.md) — Offers a pluggable customization system to override drawing logic for dates and event markers.

### Part of an Awesome List

- [Calendar Visual Customizations](https://awesome-repositories.com/f/awesome-lists/devtools/calendars-and-pickers/ui-layout-customization/calendar-visual-customizations.md) — Allows overriding the drawing logic of dates and text to apply custom visual styles and themes. ([source](https://github.com/huanghaibin-dev/CalendarView/blob/master/QUESTION.md))
- [Temporal View Switching](https://awesome-repositories.com/f/awesome-lists/devtools/list-and-grid-views/view-switching-logic/temporal-view-switching.md) — Implements logic to switch views across different time scales, such as month, week, and year.
