仿MIUI日历
一款仿miui日历,月视图,周视图滑动切换,时间从1901-01-01到2099-12-31
支持自定义时间区间
支持农历,节假日,指示圆点,默认视图,周的第一天设置等
支持单一月日历、周日历设置默认选中和默认不选中
项目地址
https://github.com/yannecer/NCalendar
效果图

效果图
下载demo:
使用方法
Gradle
compile 'com.necer.ncalendar:ncalendar:2.4.0'
布局文件
<com.necer.ncalendar.calendar.NCalendar
        android:id="@+id/ncalendar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultCalendar="Month"
        app:firstDayOfWeek="Sunday"
        app:selectCircleColor="#3388ff">
        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
 </com.necer.ncalendar.calendar.NCalendar>
       
日历包含一个月日历MonthCalendar,一个周日历WeekCalendar和一个滑动切换不同视图的NCalendar,单一日历请使用MonthCalendar或者WeekCalendar。
NCalendar日历包含了周日历和月日历,通过滑动切换不同的视图,交互效果仿miui日历,尽可能的实现miui的交互逻辑。
NCalendar内部需要一个实现了NestedScrollingChild的子类,RecyclerView,NestedScrollView都可以。
主要Api
1、监听
ncalendar.setOnCalendarChangedListener(new OnCalendarChangedListener() {
            @Override
            public void onCalendarChanged(DateTime dateTime) {
                //日历变化回调
            }
        });
2、跳转日期
参数为 yyyy-MM-dd 格式的日期
ncalendar.setDate("2017-12-31"); 
3、回到今天
ncalendar.toToday(); 
4、月-->周 周-->月
ncalendar.toWeek();
ncalendar.toMonth();
5、上一月、下一月、上一周、下一周
ncalendar.toNextPager();
ncalendar.toLastPager();
6、添加指示圆点
List<String> list = new ArrayList<>();
list.add("2017-09-21");
list.add("2017-10-21");
list.add("2017-10-1");
list.add("2017-10-15");
list.add("2017-10-18");
list.add("2017-10-26");
list.add("2017-11-21");
ncalendar.setPoint(list);
7、支持自定义属性,设置NCalendar默认视图、一周的第一天是周日还是周一等
NCalendar默认视图,Month 或者 Week,默认是 Month
app:defaultCalendar="Month"
app:defaultCalendar="Week"
设置一周开始是周一还是周日,Sunday 或者 Monday ,默认是周日Sunday
app:firstDayOfWeek="Sunday"
app:firstDayOfWeek="Monday" 
8、支持自定义时间区间
app:startDate="2010-10-01"
app:endDate="2018-10-31"
9、单一月日历、周日历设置默认不选中
false为不选中,只有点击或者跳转日期才会选中,默认为true
monthcalendar.setDefaultSelect(false);
支持的属性:
| 属性 | 描述 | 
|---|---|
| solarTextColor | 公历日期的文本颜色 | 
| lunarTextColor | 农历日期的文本颜色 | 
| solarTextSize | 公历日期的文本大小 | 
| lunarTextSize | 农历日期的文本大小 | 
| hintColor | 不是本月的日期文本颜色 | 
| selectCircleColor | 选中日期和当天的圆颜色 | 
| selectCircleRadius | 选中和当天圆环半径 | 
| isShowLunar | 是否显示农历 | 
| hollowCircleColor | 选中空心圆中间的颜色 | 
| hollowCircleStroke | 选中空心圆圆环粗细 | 
| calendarHeight | 日历高度,在NCalendar中使用 | 
| defaultCalendar | NCalendar日历默认视图 | 
| firstDayOfWeek | 每周第一天是周日还是周一 | 
| duration | 自动折叠时间 | 
| isShowHoliday | 是否显示节假日 | 
| holidayColor | 节假日“休”字颜色 | 
| workdayColor | 工作日日“班”字颜色 | 
| pointSize | 指示圆点大小 | 
| pointColor | 指示圆点颜色 |