學習并記錄一下,使用GitHub上面的日歷控件開源庫CalendarView,地址:https://github.com/huanghaibin-dev/CalendarView
實現(xiàn)效果如下:
添加Gradle依賴
dependencies {
......
//日歷控件
implementation 'com.haibin:calendarview:3.6.2'
......
}
實現(xiàn)MultiMonthView,可多選
MultiMonthView.java繼承BaseMonthView.java查看該類,里面的不同日歷子view的畫筆都在里面有定義,可以根據(jù)需要進行設置,要什么view就使用什么畫筆進行繪制。
比如我這里的四個畫筆分別對應的含義:
mCurDayLunarTextPaint 當前日期文本顏色畫筆
mSchemeTextPaint 標記的文本畫筆
mOtherMonthTextPaint 其它月份日期顏色
mCurDayTextPaint 當前日期文本顏色畫筆
public class CustomMonthView extends MultiMonthView {
private int mRadius;
public CustomMonthView(Context context) {
super(context);
}
@Override
protected boolean onDrawSelected(Canvas canvas, Calendar calendar, int x, int y, boolean hasScheme, boolean isSelectedPre, boolean isSelectedNext) {
//繪制選中的背景
int cx = x + mItemWidth / 2;
int cy = y + mItemHeight / 3 + 10;
mSelectedPaint.setAntiAlias(true);
canvas.drawCircle(cx, cy, mRadius, mSelectedPaint);
return true;
}
@Override
protected void onPreviewHook() {
mRadius = Math.min(mItemWidth, mItemHeight) / 5 * 2;
}
@Override
protected void onDrawScheme(Canvas canvas, Calendar calendar, int x, int y, boolean isSelected) {
}
/**
* 繪制文本
*
* @param canvas canvas
* @param calendar 日歷calendar
* @param x 日歷Card x起點坐標
* @param y 日歷Card y起點坐標
* @param hasScheme 是否是標記的日期
* @param isSelected 是否選中
*/
@Override
protected void onDrawText(Canvas canvas, Calendar calendar, int x, int y, boolean hasScheme, boolean isSelected) {
int cx = x + mItemWidth / 2;
int top = y - mItemHeight / 8;
if (hasScheme) {
canvas.drawText(String.valueOf(calendar.getDay()), cx, mTextBaseLine + top,
isSelected ? mSelectTextPaint
: calendar.isCurrentDay() ? mCurDayLunarTextPaint
: calendar.isCurrentMonth() ? mSchemeTextPaint : mOtherMonthTextPaint);
} else {
canvas.drawText(String.valueOf(calendar.getDay()), cx, mTextBaseLine + top,
isSelected ? mSelectTextPaint
: calendar.isCurrentDay() ? mCurDayLunarTextPaint
: calendar.isCurrentMonth() ? mCurMonthTextPaint : mOtherMonthTextPaint);
}
if (!isSelected && calendar.isCurrentDay())
canvas.drawText("今", cx, mTextBaseLine + top, mCurDayTextPaint);
}
}
布局代碼使用示例
<com.haibin.calendarview.CalendarView
android:id="@+id/calendarView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:paddingRight="10dp"
app:calendar_height="40dp"
app:current_day_text_color="#2079FF"
app:layout_constraintStart_toStartOf="@+id/tv_years"
app:layout_constraintTop_toBottomOf="@+id/tv_years"
app:lunar_text_size="0dp"
app:month_view="com.gwm.careco.mobile.car.views.CustomMonthView"
app:month_view_scrollable="true"
app:select_mode="single_mode"
app:selected_text_color="#FFFFFF"
app:selected_theme_color="#2079FF" />
實現(xiàn)點擊(<>)左右箭頭實現(xiàn)左右翻頁功能
可分別調用scrollToPre()、scrollToNext()方法,日歷布局設置都在這個類CalendarView.java,里面會有獲取當天、獲取本月、設置月視圖是否可滾動等基本屬性和回調接口,都能在該類找到,里面也都是中文注釋比較方便翻看。
//滾動到上一個月
mCalendarView.scrollToPre();
//滾動到下一個月
mCalendarView.scrollToNext();
實現(xiàn)左右滑動切換月份實時顯示當前年月
只需繼承CalendarView.OnMonthChangeListener的
@Override
public void onMonthChange(int year, int month) {
if (mYears != null) mYears.setText(year + "年" + month + "月");
}
注意:記得添加calendarView.setOnMonthChangeListener(this)
如果需要監(jiān)聽日歷選中的日期有哪些,可以繼承?CalendarView.OnCalendarMultiSelectListener
注意:記得添加CalendarView.setOnCalendarMultiSelectListener(this)
可以在如下方法內獲取到選中的日期文章來源:http://www.zghlxwxcb.cn/news/detail-858097.html
@Override
public void onCalendarMultiSelect(com.haibin.calendarview.Calendar calendar, int curSize, int maxSize) {
//獲取選中的日期
int day = calendar.getDay();
int month = calendar.getMonth();
}
設置今天之后的日期不選中,繼承CalendarView.OnCalendarInterceptListener(select_mode要設置成支持攔截)
onCalendarIntercept返回true就表示不可選中,反之亦然。
@Override
public boolean onCalendarIntercept(com.haibin.calendarview.Calendar calendar) {
//獲取日歷上選中的日、月、年
int day = calendar.getDay();
int month = calendar.getMonth();
int year = calendar.getYear();
//獲取當前日期的日、月、年
int day1 = mCalendarView.getCurDay();
int month1 = mCalendarView.getCurMonth();
int year1 = mCalendarView.getCurYear();
mIsClickable = year < year1 || (year == year1 && (month < month1 || (month == month1 && day < day1)));
return mIsClickable;
}
@Override
public void onCalendarInterceptClick(com.haibin.calendarview.Calendar calendar, boolean isClick) {
ToastManager.getInstance().showToast((isClick ? "不能選擇小于當前日期" : "無效日期"));
}
完成。文章來源地址http://www.zghlxwxcb.cn/news/detail-858097.html
到了這里,關于Android GitHub開源庫CalendarView的使用的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!