# CalendarComponent
**Repository Path**: ccclll1990/CalendarComponent
## Basic Information
- **Project Name**: CalendarComponent
- **Description**: 日历组件,包含了多个日历控件样式供使用,具有标识事务能力的一套日历组件。
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-09-24
- **Last Updated**: 2022-07-28
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 日历组件
>原介绍:
日历组件(CalendarComponent)库的来源是[CalendarView](https://github.com/dengshiwei/CalendarView)。该控件的来由在[Android自定义控件之日历控件](http://blog.csdn.net/mr_dsw/article/details/48755993)中有介绍。CalendarView称不上一个组件,仅仅只是一个自定义的View,根据当时的项目定制需求进行开发,由于在平时也遇到了多种的日历样式,所以萌生了对日历控件进行重构的项目,所以诞生了这个库。
>
>后因业务需要,修改了统一的月份和日期回调方法等..
## 原版本迭代
##### 1.0.0 release
* 支持月份日期界面的样式自定制。
* 支持星期的界面样式定制。
* 支持日历事务的显示。
* 支持班、休标志的绘制。
* 支持左右滑动进行月份的切换。
* 新增CircleCalendarView圆形日历样式。
* 新增ADCircleCalendarView日历样式。
* 新增平滑模式
* 修复滑动时左右两边月份显示事务的bug。
* 修复月末滑动处理显示的bug。
## 项目集成
##### 1、Gradle
compile 'com.github.ccclll1990:CalendarComponent:1.0.8'
##### 2、Maven
com.github.ccclll1990
CalendarComponent
1.0.8
## 简单使用
#### 样式设置
日历界面的样式继承IDayTheme,通过实现IDayTheme中的方法来实现日历控件样式的更改。
* colorSelectBG:选中日期的背景色
* colorSelectDay:选中日期的颜色
* colorToday:今天日期颜色
* colorMonthView:日历的整个背景色
* colorWeekday:工作日的颜色
* colorWeekday(int day):不同工作日的颜色
* colorWeekend:周末的颜色
* colorDecor:事务装饰颜色
* colorRest:假日颜色
* colorWork:班颜色
* colorDesc:描述文字颜色
* sizeDay:日期大小
* sizeDesc:描述文字大小
* sizeDecor:装饰器大小
* dateHeight:日期高度
* colorLine:线条颜色
* smoothMode:滑动模式,0为有滑动模式,1没有滑动效果。
周的样式设置通过继承实现IWeekTheme。
* colorTopLinen:顶部线颜色
* colorBottomLine:底部颜色
* colorWeekday:工作日颜色
* colorWeekend:周末颜色
* colorWeekView:星期的整个背景色
* sizeLine:线的宽度
* sizeText:字体大小
使用自定义样式就需要分别继承实现日期和周的样式,然后通过方法进行设置。
//设置日期日历界面的样式
calendarView.setDayTheme(new IDayTheme());
//设置星期的界面样式
calendarView.setWeekTheme(new IWeekTheme() {);
##### 一、GridCalendarView,格网日历控件
当在你的项目中引入了CalendarComponent库后,你就可以像使用普通控件一样使用库中的日历控件。GridCalendarView是一个绘制有格网线的日历控件,支持日历的左右滑动以及手动翻页,支持日历的事务的显示、以及用户定制日历的主题样式。具体使用如下:
GridCalendarView gridCalendarView = (GridCalendarView) findViewById(R.id.gridMonthView);
gridCalendarView.setOnCalendarClickListener(new OnCalendarClickListener() {
@Override
public void onDayChange(int year,int month,int day){
Toast.makeText(GridCalendarActivity.this,"点击了" + year + "-" + month + "-" + day,Toast.LENGTH_SHORT).show();
Log.e(TAG,"点击了" + year + "-" + month + "-" + day);
}
@Override
public void onMonthChange(boolean isLeft,int year,int month){
Toast.makeText(GridCalendarActivity.this,(isLeft ? "上月" : "下月") + ", 现在月份 " + year + "-" + month,Toast.LENGTH_SHORT).show();
Log.e(TAG,(isLeft ? "上月" : "下月") + ", 现在月份 " + year + "-" + month);
}
});
这是GridCalendarView的简单使用,我们可以获取单击选择的日期。同时我们也可以支持事务,事务的处理,我们通过CalendarInfo类进行表示。如下:
List list = new ArrayList();
list.add(new CalendarInfo(2016,7,4,"¥1200"));
list.add(new CalendarInfo(2016,7,6,"¥1200"));
list.add(new CalendarInfo(2016,7,12,"¥1200"));
list.add(new CalendarInfo(2016,7,16,"¥1200"));
list.add(new CalendarInfo(2016,7,28,"¥1200"));
list.add(new CalendarInfo(2016,7,1,"¥1200",1));
list.add(new CalendarInfo(2016,7,11,"¥1200",1));
list.add(new CalendarInfo(2016,7,19,"¥1200",2));
list.add(new CalendarInfo(2016,7,21,"¥1200",1));
gridCalendarView.setCalendarInfos(list);
CalendarInfo类字段示意:
* year 事务年份
* month 事务月份
* day 事务日期号
* des 事务描述
* rest 是否为休、班。1为休,2为班,默认为普通日期
样式的设置:
//设置日期日历界面的样式
gridCalendarView.setDayTheme(new IDayTheme());
//设置星期的界面样式
gridCalendarView.setWeekTheme(new IWeekTheme() {);
效果图:
滑动模式一:

滑动模式二:

##### 二、CircleCalendarView圆形日历控件
使用方法同GridCalendarView,包括控件的回调函数、设置事务数据,都是一样的回调接口。该日历控件样式是圆形日历样式。
滑动模式一:

滑动模式二:

##### 三、ADCircleCalendarView圆形日历控件
使用方法同GridCalendarView,包括控件的回调函数、设置事务数据,都是一样的回调接口。该日历控件样式是圆形日历样式,类似于华为p6的系统日历。
滑动模式一:

滑动模式二:

##### 四、ADCircleCalendarView圆形日历控件

## 高级进阶
该项目的核心是MonthView基类的实现,该基类中实现了多数的业务数据处理以及滑动效果的开发。如果你想使用定制一些日历效果,你可以继承MonthView,然后重写它的相关方法。
* drawLines(Canvas canvas,int rowsCount);绘制格网线
* drawBG(Canvas canvas,int column,int row,int day);绘制选中背景色
* drawDecor(Canvas canvas,int column,int row,int day);绘制事务标识符号
* drawRest(Canvas canvas,int column,int row,int day);绘制‘班’、‘休’
* drawText(Canvas canvas,int column,int row,int day);绘制日期
在开发设计时,我提取了这四部分的业务逻辑。你可以重写这四个方法进行定制,实现个性化效果。参数说明:
* Canvas canvas:绘制的画布;
* int rowsCount:当前年月日历绘制需要的行数
* int column:列号,以0开始;
* int row:行号,以0开始
* int day:需要绘制的日期号,从月的1号开始
完成主要的日期绘制,就完成了大部分的日历绘制,然后你可自行使用实现星期-——星期日的绘制,比如你使用TextView结合LinearLayout实现。在这里我通过WeekView进行实现,你可以通过实现IWeekTheme来实现它的样式调整,最后通过组合实现效果。
基本的思路就是这样,欢迎大家给予意见。