XML用法
如果需要在日历控件下方使用其它控件,使用CalendarLayout控件即可,calendar_content_view_id为其它控件的id,支持任意控件,如RecyclerView、ListView。CalendarView的calendar_card_view为任意自定义实现的日历绘制控件路径。
<com.haibin.calendarview.CalendarLayout
android:layout_width=“match_parent”
android:layout_height=“match_parent”
android:orientation=“vertical”
android:background="#fff"
app:calendar_content_view_id="@+id/linearView">
<com.haibin.calendarview.CalendarView
android:id="@+id/calendarView"
android:layout_width=“match_parent”
android:layout_height=“wrap_content”
android:background="#fff"
app:current_month_text_color="#333333"
app:current_month_lunar_text_color="#CFCFCF"
app:min_year=“”
app:other_month_text_color="#e1e1e1"
app:scheme_text_color="#333"
app:scheme_theme_color="#128c4b"
app:selected_lunar_text_color="#CFCFCF"
app:calendar_card_view=“com.haibin.calendarviewproject.meizu.MeiZuCalendarCardView”
app:selected_text_color="#333"
app:selected_theme_color="#108cd4"
app:week_background="#fff"
app:week_text_color="#111" />
</com.haibin.calendarview.CalendarLayout>
熟悉一下这几个简单的特性,看看日历内容界面的绘制BaseCalendarCardView,根据需求实现以下部分方法即可
/**
开始绘制前的回调钩子,这里做一些初始化的操作,每次绘制只调用一次,性能高效没有需要可忽略不实现例如:1、需要绘制圆形标记事件背景,可以在这里计算半径2、绘制矩形选中效果,也可以在这里计算矩形宽和高
*/
protected void onPreviewHook() {
// TODO: /11/16
}
/**
循环绘制开始的回调,不需要可忽略绘制每个日历项的循环,用来计算baseLine、圆心坐标等都可以在这里实现@param x 日历Card x起点坐标@param y 日历Card y起点坐标
*/
protected void onLoopStart(int x, int y) {
// TODO: /11/16
}
/**
绘制选中的日期@param canvas canvas@param calendar 日历日历calendar@param x 日历Card x起点坐标@param y 日历Card y起点坐标@param hasScheme hasScheme 非标记的日期
*/
protected abstract void onDrawSelected(Canvas canvas, Calendar calendar, int x, int y, boolean hasScheme);
/**
绘制标记的日期UI@param canvas canvas@param calendar 日历calendar@param x 日历Card x起点坐标@param y 日历Card y起点坐标
*/
protected abstract void onDrawScheme(Canvas canvas, Calendar calendar, int x, int y);
/**
绘制日历文本@param canvas canvas@param calendar 日历calendar@param x 日历Card x起点坐标@param y 日历Card y起点坐标@param hasScheme 是否是标记的日期@param isSelected 是否选中
*/
protected abstract void onDrawText(Canvas canvas, Calendar calendar, int x, int y, boolean hasScheme, boolean isSelected);
举个例子:如果你的需求是类似魅族日历的UI,那么第一步,继承BaseCalendarCardView,然后实现onDrawSelected、onDrawScheme、onDrawText三个回调函数即可
public class MeiZuCalendarCardView extends BaseCalendarCardView {
private Paint mTextPaint = new Paint();
private Paint mSchemeBasicPaint = new Paint();
private float mRadio;
private int mPadding;
private float mSchemeBaseLine;
public MeiZuCalendarCardView(Context context) {
super(context);
mTextPaint.setTextSize(dipToPx(context, 8));
mTextPaint.setColor(0xff111111);
mTextPaint.setAntiAlias(true);
mTextPaint.setFakeBoldText(true);
mSchemeBasicPaint.setAntiAlias(true);
mSchemeBasicPaint.setStyle(Paint.Style.FILL);
mSchemeBasicPaint.setTextAlign(Paint.Align.CENTER);
mSchemeBasicPaint.setColor(0xffed5353);
mSchemeBasicPaint.setFakeBoldText(true);
mRadio = dipToPx(getContext(), 7);
mPadding = dipToPx(getContext(), 4);
Paint.FontMetrics metrics = mSchemeBasicPaint.getFontMetrics();
mSchemeBaseLine = mRadio - metrics.descent + (metrics.bottom - metrics.top) / 2 + dipToPx(getContext(), 1);
}
/**
绘制选中的日期@param canvas canvas@param calendar 日历日历calendar@param x 日历Card x起点坐标@param y 日历Card y起点坐标@param hasScheme hasScheme 非标记的日期
*/
@Override
protected void onDrawSelected(Canvas canvas, Calendar calendar, int x, int y, boolean hasScheme) {
mSelectedPaint.setStyle(Paint.Style.FILL);
mSelectedPaint.setColor(0x80cfcfcf);
canvas.drawRect(x + mPadding, y + mPadding, x + mItemWidth - mPadding, y + mItemHeight - mPadding, mSelectedPaint);
}
/**
绘制标记的日期UI 这里魅族界面不需要绘制多彩风格,忽略即可@param canvas canvas@param calendar 日历calendar@param x 日历Card x起点坐标@param y 日历Card y起点坐标
写在最后
很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从哪里入手去学习,对此我整理了一些资料,需要的可以免费分享给大家
我的【Github】会分享一些关于Android进阶方面的知识,也会分享一下最新的面试题~
如果你熟练掌握GitHub中列出的知识点,相信将会大大增加你通过前两轮技术面试的几率!这些内容都供大家参考,互相学习。
①「Android面试真题解析大全」PDF完整高清版+②「Android面试知识体系」学习思维导图压缩包——————可以在我的【Github】阅读下载,最后觉得有帮助、有需要的朋友可以点个赞
%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)阅读下载**,最后觉得有帮助、有需要的朋友可以点个赞
[外链图片转存中…(img-iOzHObug-1646139363726)]
[外链图片转存中…(img-RldUOTGv-1646139363728)]