Android GitHub开源库CalendarView的使用

这篇具有很好参考价值的文章主要介绍了Android GitHub开源库CalendarView的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

学习并记录一下,使用GitHub上面的日历控件开源库CalendarView,地址:https://github.com/huanghaibin-dev/CalendarView

实现效果如下:

android开发calendarview,android

添加Gradle依赖

dependencies {
......
    //日历控件
    implementation 'com.haibin:calendarview:3.6.2'
......
}

实现MultiMonthView,可多选

MultiMonthView.java继承BaseMonthView.java查看该类,里面的不同日历子view的画笔都在里面有定义,可以根据需要进行设置,要什么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" />

实现点击(<>)左右箭头实现左右翻页功能

可分别调用scrollToPre()、scrollToNext()方法,日历布局设置都在这个类CalendarView.java,里面会有获取当天、获取本月、设置月视图是否可滚动等基本属性和回调接口,都能在该类找到,里面也都是中文注释比较方便翻看。

//滚动到上一个月
 mCalendarView.scrollToPre();

 //滚动到下一个月
 mCalendarView.scrollToNext();
实现左右滑动切换月份实时显示当前年月

只需继承CalendarView.OnMonthChangeListener的

 @Override
    public void onMonthChange(int year, int month) {
        if (mYears != null) mYears.setText(year + "年" + month + "月");
    }


注意:记得添加calendarView.setOnMonthChangeListener(this)

如果需要监听日历选中的日期有哪些,可以继承 CalendarView.OnCalendarMultiSelectListener

注意:记得添加CalendarView.setOnCalendarMultiSelectListener(this)

可以在如下方法内获取到选中的日期

    @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 ? "不能选择小于当前日期" : "无效日期"));
    }

完成。文章来源地址https://www.toymoban.com/news/detail-858097.html

到了这里,关于Android GitHub开源库CalendarView的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android开发者必须收藏的8个开源库,Android开发面试技能介绍

    听过很多人说Android学习很简单,做个App就上手了,工作机会多,毕业后也比较容易找工作。这种观点可能是很多Android开发者最开始入行的原因之一。 在工作初期,工作主要是按照业务需求实现App页面的功能,按照设计师的设计稿实现页面的效果。 在实现的过程中,总是会被

    2024年03月19日
    浏览(80)
  • Android开发 我的开源Android Log “日志狗”LogDog

    目录 一、简介 二、LogDog的优点 1、打印的格式 2、日志信息 3、LogDog的使用便利 4、参数优化 5、日志文件输出 6、日志文件的内容加密 三、依赖使用LogDog 1、添加仓库 2、添加依赖 四、使用说明 1、初始化 2、配置说明 3、如何使用和参数说明 LogDog 是一个开源的 Java 日志框架,

    2024年02月04日
    浏览(45)
  • 从零开始学数据结构和算法:腾讯Android开发面试记录,已开源_android 开发面试算法

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新Android移动开发全套学习资

    2024年04月25日
    浏览(56)
  • Android 开发的五大开源网站,安卓内存优化面试

    (4) 多快捷键支持 ① 左右翻页 在项目(搜索)列表及详情页左手党可以通过 awsd,右手党可通过上下左右键或者 nl 键翻页,浏览项目从未有过的流畅体验。 ② 快速打标签 项目详情页可通过 t 快速进入新增标签输入框,回车确定标签,Esc 退出编辑。 ③ 快速搜索 项目列表页可通

    2024年04月09日
    浏览(58)
  • Android开源计划-一周开发app,webrtc音视频开发

    题目 – 一周开发app计划 首批参与成员 -小巫 -墨香 -梦痕 -边城刀客 -徐cc 要求 – -每位认领者按照开源规范来做,代码规范和Android开发规范 -每位认领者必须拥有github账号,熟练使用git对代码进来管理 -每个人认领一个功能点或模块 -提出完善的解决方案并提供封装良好的库

    2024年04月08日
    浏览(58)
  • android 五大应用开发框架(1),腾讯竟然又偷偷开源了一套Android原生UI框架

    2、Android Runtime Android包含一个核心库的集合,提供大部分在Java编程语言核心类库中可用的功能。每一个Android应用程序是Dalvik虚拟机中的实例,运行在他们自己的进程中。Dalvik虚拟机设计成,在一个设备可以高效地运行多个虚拟机。Dalvik虚拟机可执行文件格式是.dex,dex格式是

    2024年04月09日
    浏览(71)
  • 【Android -- UI 开发】RecyclerView 侧滑菜单(侧滑删除) 开源库

    不断学习,做更好的自己 !💪 侧滑菜单确实是一个比较常见的功能,其中场景较多的就是侧滑删除,它是iOS列表删除通用交互方式,比如微信、QQ、苹果自带的短信、通讯录列表等,都有侧滑删除功能。由于国内Android、iOS通常都是一套设计,因次,Android端怎么能少得了这个

    2023年04月21日
    浏览(78)
  • Android开发 基于ARouter开源的路由框架的YmRouter

    目录 一、ARouter的简介 二,集成  1、添加jitpack 仓库 2、依赖YmRouter库 单model项目 多model项目 三、使用和ARouter的小区别 3.1、和ARouter的区别 3.2、简单的初始化  3.3、简单使用 3.4 携带值跳转Activity ARouter是一个用于Android的路由框架,它能够帮助开发者实现组件之间的通信和页面

    2024年02月02日
    浏览(41)
  • 9成Android开发者必须收藏的80个开源库

    Android 应用性能调优的技术点 http://zhuanlan.zhihu.com/kaede/20326073 Android 客户端性能优化 http://blog.tingyun.com/web/article/detail/155 美团 WebView性能、体验分析与优化 https://tech.meituan.com/WebViewPerf.html MVC,MVP 和 MVVM 的图示 http://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm.html 不容错过,最全的 Androi

    2024年04月23日
    浏览(46)
  • [Android]使用Git将项目提交到GitHub

    如果你的Mac还没有安装Git,你可以通过Homebrew来安装它: 1.创建本地Git仓库 在项目的根目录下,打开终端(Terminal)并执行以下命令来初始化一个新的Git仓库: 2.添加文件到仓库 将项目文件添加到Git仓库中。首先可以添加所有文件: 或者,你可以选择性地添加文件: 3.提交更

    2024年02月04日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包