那麼多輪子都沒有滿足需求的,只能自己造。
自定義Android日曆,只有一個CalendarView,非常小巧。核心代碼400行左右,主要就是畫。
功能:支持左右滑動切換月份,上下滑動切換年份,設置背景,邊框,週末或週一爲第一天,顯示其他月份日期等功能。 具體參考Api或者自定義。
CSDN:https://blog.csdn.net/lylddingHFFW/article/details/88227283
GitHub:https://github.com/lyldding/CalendarView
大致思路:(主要分爲5個區域)
1,初始化時計算每個區域每個Item的具體位置,並緩存。
2,紅色年月爲顯示區域,在更新時同步更新其他四個區域的日期,並緩存。
3,處理移動和繪製。
代碼簡述:(具體看源碼吧,核心代碼400行左右)
1,計算各個Item的具體位置,並更新月份信息
private void computeData() {
mViewRectF.set(0 + mStrokeWidth / 2f, 0 + mStrokeWidth / 2f, mViewWidth - mStrokeWidth / 2f, mViewHeight - mStrokeWidth / 2f);
mViewWidth = (int) mViewRectF.width();
mItemWidth = mViewWidth / CalendarUtils.WEEK_COLUMN;
computeTitleData();
computeWeekData();
computeDayData();
updateMonthData(mCurrentYear, mCurrentMonth, Type.NONE);
}
2,繪製各個部分:背景,年月和切換按鈕,星期,日期。
protected void onDraw(Canvas canvas) {
mIsDrawing = true;
drawBackground(canvas);
drawDataStr(canvas);
drawSwitchButton(canvas);
drawWeek(canvas);
drawAllDay(canvas);
drawOuterLine(canvas);
mIsDrawing = false;
}