XML用法

如果需要在日历控件下方使用其它控件,使用CalendarLayout控件即可,calendar_co Android开源项目:ali1024.coding.net/public/P7/Android/git ntent_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=“2004”
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: 2017/11/16
    }

/**

  • 循环绘制开始的回调,不需要可忽略
  • 绘制每个日历项的循环,用来计算baseLine、圆心坐标等都可以在这里实现

  • @param x 日历Card x起点坐标
  • @param y 日历Card y起点坐标
    */
    protected void onLoopStart(int x, int y) {
    // TODO: 2017/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);

【延伸Android必备知识点】

android 自定义日历界面 android自定义日历控件_面试

【Android部分高级架构视频学习资源】

**Android精讲视频学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水!

**任何市场都是优胜略汰适者生存,只要你技术过硬,到哪里都不存在饱和不饱和的问题,所以重要的还是提升自己。懂得多是自己的加分项 而不是必须项。门槛高了只能证明这个市场在不断成熟化!**另外一千个读者就有一千个哈姆雷特,所以以上只是自己的关键,不喜勿喷!

如果你是卡在缺少学习资源的瓶颈上,那么刚刚好我能帮到你。欢迎关注会持续更新和分享的。
略汰适者生存,只要你技术过硬,到哪里都不存在饱和不饱和的问题,所以重要的还是提升自己。懂得多是自己的加分项 而不是必须项。门槛高了只能证明这个市场在不断成熟化!**另外一千个读者就有一千个哈姆雷特,所以以上只是自己的关键,不喜勿喷!

如果你是卡在缺少学习资源的瓶颈上,那么刚刚好我能帮到你。欢迎关注会持续更新和分享的。