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=“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 mSchemeB

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

aseLine;

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起点坐标
    */
    @Override
    protected 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 是否选中
    */
    @Override

Android开源的精美日历控件,热插拔设计的万能自定义UI,flutter调用原生sdk相关推荐

  1. Android开源的精美日历控件,热插拔设计的万能自定义UI

    UI框架应该逻辑与界面实现分离,该日历控件使用了热插拔的设计 ,简单几步即可实现你需要的UI效果,热插拔的思想是你提供你的实现,我提供我的插座接口,与自定义Behavior是一样的思想. 听说第一页无 ...

  2. android+高仿+日历,Android开源的精美日历控件,热插拔设计的万能自定义UI

    UI框架应该逻辑与界面实现分离,该日历控件使用了热插拔的设计 ,简单几步即可实现你需要的UI效果,热插拔的思想是你提供你的实现,我提供我的插座接口,与自定义Behavior是一样的思想. 听说第一页无 ...

  3. Android开源的精美日历控件,热插拔设计的万能自定义UI,看完直接怼产品经理

    <attr name="current_month_text_color" format="color" /> <!--当前月份的字体颜色-- ...

  4. Android开源的精美日历控件,热插拔设计的万能自定义UI,你值得拥有

    XML用法 如果需要在日历控件下方使用其它控件,使用CalendarLayout控件即可,calendar_content_view_id为其它控件的id,支持任意控件,如RecyclerView.L ...

  5. 开源一个ReactNative日历控件

    项目地址: react-native-slideable-calendar-strip 演示地址: Calendar-Strip.mp4 为何要再实现一个日历控件 已经有了react-native-c ...

  6. android自定义选年控件,Android精美日历控件CalendarView自定义使用完全解析

    项目github地址 此框架采用组合的方式,各个模块互相独立,可自由采用各种提供的控件组合,完全自定义自己需要的UI,周视图和月视图可通过简单自定义任意自由绘制,不怕美工提需求!!!下面教程将介绍如何 ...

  7. C#自定义checkBox开关按钮控件,设计漂亮美观的UI按钮

    第一步: 先准备开关按钮要使用到的背景图片,一张是开启的,一张是关闭的,如下图:       一共有6种款式,大家也可以全部加进去 图标素材下载地址: https://download.csdn.ne ...

  8. android程序日历layout,Android使用GridLayout绘制自定义日历控件

    效果图 思路:就是先设置Gridlayout的行列数,然后往里面放置一定数目的自定义日历按钮控件,最后实现日历逻辑就可以了. 步骤: 第一步:自定义日历控件(初步) 第二步:实现自定义单个日期按钮控件 ...

  9. 9 款样式华丽的 jQuery 日期选择和日历控件

    现在的网页应用越来越丰富,我们在网页中填写日期和时间已经再也不用手动输入了,而是使用各种各样的日期时间选择控件,大部分样式华丽的日期选择和日历控件都是基于jQuery和HTML5的,比如今天要分享的这 ...

最新文章

  1. 子站间 携带cookie_JavaScript cookie 不同子域名之间共享
  2. MyBatis3 用log4j在控制台输出 SQL
  3. NSTimer与Run loop Modes
  4. linux 解压缩常用命令
  5. 使用 python 3.6 和 Vmware WorkStation 构建一个小型虚拟局域网通讯程序
  6. SDUT2389Ballot evaluation
  7. 迷你飞信一出,LibFetion该挂了把
  8. 计算机一级选择题已做完确认,计算机一级选择题(附答案)
  9. sql怎么修改服务器角色,创建、删除或修改角色 (Management Studio)
  10. VS2008下QT开发环境搭建
  11. cronschedulebuilder 到时还没运行完_为什么我的软件编译时没问题,运行时却出错?...
  12. python知识图谱可视化_知识图谱可视化
  13. 表单和iframe的使用
  14. 云原生时代微服务的高可用架构设计
  15. vb.net datetimepicker月到当日的天数_【坦克世界】11月10日个人专属优惠商店限时开放...
  16. Oracle中的单行函数
  17. Android BLE新手进入
  18. java 静态方法的使用_java的静态方法的使用
  19. Tomcat免安装版+Eclipse配置
  20. 计算机管理如何格式化u盘,优盘格式化,教您如何格式化u盘

热门文章

  1. Pencil:免费的手绘风格开源原型图设计工具(转载)
  2. ckeditor4去掉超链接
  3. 雪夜游西湖记 文/一个会写诗的程序员
  4. 怎样在电脑上提取视频中的音乐文件
  5. 【集合】遍历 List 集合的几种方式
  6. 外企看好中国外包业务市场
  7. java - io流拷贝文件
  8. ai前世识别_百度ai人脸扫描前世身份安装,百度ai人脸扫描前世身份安装app软件预约 v1.0-开心路...
  9. 产品运营:如何做好B端竞品分析?
  10. 自适应模糊控制——间接自适应模糊控制