Android 第三方库CalendarView

news2024/11/15 19:52:31

Android 第三方库CalendarView

根据需求和库的使用方式,自己弄了一个合适自己的日历,仅记录下,方便下次弄其他样式的日历。地址

需求:

  1. 只显示当月的数据

  2. 默认的月视图有矩形的线

  3. 选中的天数也要有选中的矩形框

  4. 今天的item需要显示“今”

  5. 部分有记录的要显示图片

1.布局代码

<com.haibin.calendarview.CalendarView
    android:id="@+id/calendarView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#fff"
    app:calendar_height="46dp"
    app:calendar_padding="10dp"
    app:current_month_lunar_text_color="#CFCFCF"
    app:current_month_text_color="#333333"
    app:min_year="2004"
    app:month_view="com.haibin.calendarviewproject.zhengq.SimpleMonthView"
    app:month_view_show_mode="mode_only_current"
    app:other_month_text_color="#e1e1e1"
    app:scheme_text="假"
    app:scheme_text_color="#333"
    app:scheme_theme_color="#333"
    app:selected_text_color="#333"
    app:selected_theme_color="#333"
    app:week_background="#fff"
    app:week_text_color="#111"
    app:week_view="com.haibin.calendarviewproject.zhengq.SimpleWeekView"
    app:year_view_day_text_color="#333333"
    app:year_view_day_text_size="9sp"
    app:year_view_month_text_color="#ff0000"
    app:year_view_month_text_size="20sp"
    app:year_view_scheme_color="#f17706" />

month_view_show_mode属性可以设置 只显示当月数据

calendar_height属性可以设置 月item的高度

2.默认的矩形框

@Override
protected void onDrawText(Canvas canvas, Calendar calendar, int x, int y, boolean hasScheme, boolean isSelected) {
    //这里绘制文本,不要再问我怎么隐藏农历了,不要再问我怎么把某个日期换成特殊字符串了,要怎么显示你就在这里怎么画,你不画就不显示,是看你想怎么显示日历的,而不是看框架
    canvas.drawRect(x, y, x + mItemWidth, y + mItemHeight, mRectPaint);
    ...
}

3.选中的矩形框

@Override
    protected boolean onDrawSelected(Canvas canvas, Calendar calendar, int x, int y, boolean hasScheme) {
        //这里绘制选中的日子样式,看需求需不需要继续调用onDrawScheme
        //绘制选中的日期矩形
        mSelectedPaint.setColor(getContext().getResources().getColor(R.color.solar_background));
        mSelectedPaint.setStyle(Paint.Style.STROKE);
        canvas.drawRect(x, y, x + mItemWidth, y + mItemHeight, mSelectedPaint);
​
        return true;//如果这里是false选中一个带Scheme的item,不显示Scheme,设置true就会显示
    }

4.scheme

/**
 * 绘制标记的事件日子
 *
 * @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) {
    //这里绘制标记的日期样式,想怎么操作就怎么操作
​
    //绘制到日期数字的左边
    canvas.drawText(calendar.getScheme(), x + mPadding, y + mItemHeight / 2 + mPadding, mTextPaint);
​
    //绘制一张图片
    Drawable drawable = getContext().getResources().getDrawable(R.mipmap.record_gong_l);
    //第一层第一个
    canvas.drawBitmap(BitmapUtils.drawable2Bitmap(drawable), x + mPadding, y + mPadding, mTextPaint);
    //第一层第二个
    canvas.drawBitmap(BitmapUtils.drawable2Bitmap(drawable), x + mItemWidth / 2 - drawable.getIntrinsicWidth() / 2, y + mPadding, mTextPaint);
    //第一层第三个
    canvas.drawBitmap(BitmapUtils.drawable2Bitmap(drawable), x + mItemWidth - drawable.getIntrinsicWidth() - mPadding, y + mPadding, mTextPaint);
​
    //第二层第三个
    canvas.drawBitmap(BitmapUtils.drawable2Bitmap(drawable), x + mItemWidth - drawable.getIntrinsicWidth() - mPadding,
            y + mItemHeight / 2 - drawable.getIntrinsicHeight() / 2, mTextPaint);
​
    //第三层第一个
    canvas.drawBitmap(BitmapUtils.drawable2Bitmap(drawable), x + mPadding,
            y - mPadding + mItemHeight - drawable.getIntrinsicHeight(), mTextPaint);
    //第三层第二个
    canvas.drawBitmap(BitmapUtils.drawable2Bitmap(drawable), x + mItemWidth / 2 - drawable.getIntrinsicWidth() / 2,
            y - mPadding + mItemHeight - drawable.getIntrinsicHeight(), mTextPaint);
    //第三层第三个
    canvas.drawBitmap(BitmapUtils.drawable2Bitmap(drawable), x + mItemWidth - drawable.getIntrinsicWidth() - mPadding,
            y - mPadding + mItemHeight - drawable.getIntrinsicHeight(), mTextPaint);
}

5.完成

6.注意

1.Paint颜色设置

    public SimpleMonthView(Context context) {
        super(context);
        mRectPaint.setStyle(Paint.Style.STROKE);
        mRectPaint.setStrokeWidth(dipToPx(context, 0.5f));
        mRectPaint.setColor(0x88efefef);//这里的演示不能设置透明度为1的颜色,会覆盖选中的颜色
​
        mPadding = dipToPx(getContext(), 4);
        mTextPaint.setTextSize(dipToPx(context, 8));
        mTextPaint.setTextSize(dipToPx(context, 10));
        mTextPaint.setColor(getContext().getResources().getColor(R.color.solar_background));//黑色
        mTextPaint.setAntiAlias(true);
        mTextPaint.setFakeBoldText(true);
    }

2.SimpleWeekView和SimpleMonthView要一样的

3.onDrawSelected中的return true;,否则不会显示scheme

4.不足之处:日历旁边会显示白色的边框

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/815190.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

强推!大语言模型『百宝书』,一文缕清所有大模型!

夕小瑶科技说 原创 作者 | 王思若 最近&#xff0c;大型语言模型无疑是AI社区关注的焦点&#xff0c;各大科技公司和研究机构发布的大模型如同过江之鲫&#xff0c;层出不穷又眼花缭乱。 让笔者恍惚间似乎又回到了2020年国内大模型“军备竞赛”的元年&#xff0c;不过那时候…

package-lock.json 作用

参照&#xff1a; https://www.cnblogs.com/honkerzh/p/16767566.html

【雕爷学编程】MicroPython动手做(25)——语音合成与语音识别

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…

山西电力市场日前价格预测【2023-08-01】

日前价格预测 预测明日&#xff08;2023-08-01&#xff09;山西电力市场全天平均日前电价为310.15元/MWh。其中&#xff0c;最高日前电价为335.18元/MWh&#xff0c;预计出现在19: 45。最低日前电价为288.85元/MWh&#xff0c;预计出现在14: 00。 价差方向预测 1&#xff1a;实…

无涯教程-jQuery - css( properties )方法函数

css(properties)方法将键/值对象设置为所有匹配元素的样式属性。 css( properties ) - 语法 selector.css( properties ) 上面的语法可以写成如下- selector.css( {key1:val1, key2:val2....keyN:valN}) 这是此方法使用的所有参数的描述- key:value - 设置为样式属…

郑州https数字证书

很多注重隐私的网站都注重网站信息的安全&#xff0c;比如购物网站就需要对客户的账户信息以及支付信息进行安全保护&#xff0c;否则信息泄露&#xff0c;客户与网站都有损失&#xff0c;网站也会因此流失大量客户。而网站使用https证书为客户端与服务器之间传输的信息加了一个…

<Git>版本控制工具Git常见的开发操作

下载安装,环境变量配置直接百度; 1.代码拉取: 操作步骤&#xff1a;在正确配置完git的条件下:在本地文件夹下&#xff1a;右键–Git Bash -Here&#xff1a; 出现如下弹窗: 在黑窗口输入代码拉取路径(一般都是把命令和路径直接在外面写好,直接粘贴(在窗口右键,Paste)) 代码拉去…

JavaScript学习 -- 对称加密算法3DES

在现代的互联网时代&#xff0c;数据安全性备受关注。为了保护敏感数据的机密性&#xff0c;对称加密算法是一种常用的方法。在JavaScript中&#xff0c;3DES&#xff08;Triple Data Encryption Standard&#xff09;是一种常用的对称加密算法。本篇博客将为您展示如何在JavaS…

竞速榜实时离线对数方案演进介绍 | 京东云技术团队

一、背景 竞速榜是大促期间各采销群提供的基于京东实时销售数据的排行榜&#xff0c;同样应对大促流量洪峰场景&#xff0c;通过榜单撬动品牌在京东增加资源投入。竞速榜基于用户配置规则进行实时数据计算&#xff0c;榜单排名在大促期间实时变化&#xff0c;相关排名数据在微…

Chrome浏览器中的vue插件devtools的下载方式(使用Chrome应用商店/科学上网情况下)

目录 devtools对前端来说的好处——开发预览、远程调试、性能调优、Bug跟踪、断点调试等 下载步骤&#xff1a; 测试阶段&#xff1a; 最近做项目要使用devtools这个vue插件。 devtools对前端来说的好处——开发预览、远程调试、性能调优、Bug跟踪、断点调试等 下载步骤…

灭蚊灯上架亚马逊美国站UL1559测试报告办理

近年来&#xff0c;随着全球气候变暖和环境变化&#xff0c;蚊虫成为了世界各地人们的头疼问题。为了解决这一困扰&#xff0c;我司研发出一款创新的昆虫控制设备——灭蚊灯&#xff0c;并成功将其上架亚马逊美国站。为了满足亚马逊站对产品的要求&#xff0c;我们积极办理了UL…

寒假作业(蓝桥杯2016年省赛C++A组第6题 )

题目: 注:蓝桥杯2016年省赛C++A组第6题 请填写表示方案数目的整数。 题解: 由题可知这是一道全排列问题,因此我们可以使用c++的next_permutation函数对于1-13的数字进行全排列即可,并每次排列判断是否满足题意。 注意:你提交的应该是一个整数,不要填写任何多余的内…

测试|Selenium介绍及环境搭建

测试|Selenium介绍及环境搭建 1.Selenium是什么 Selenium是用来做web网站 UI自动化的测试工具/测试框架。 我们这里说的Selenium是Selenium2.0&#xff0c;它由Selenium IDE&#xff0c;Webdriver, Selenium Grid组成。 Selenium IDE是用于Selenium测试的完成集成开发环境&…

小程序反馈与投诉混淆官方修改指引

根据《微信小程序平台运营规范》5.14“混淆行为&#xff1a;5.14.1 恶意混淆腾讯官方功能”&#xff0c;相关违规类型包括但不限于以下类型。 官方“反馈与投诉”入口与样式&#xff1a; 违规类型1&#xff1a;混淆官方投诉入口 小程序中的投诉入口样式与官方投诉入口icon名称…

边缘检测(Canny算子)实现原理

当前,边缘检测算法在实际应用中越加广泛,技术趋势也是快速发展,热火朝天。很多朋友或多或少了解,需要实现各类功能,尤其是一些复杂的需求,实现更好的滤波、满足更佳的提取效果,一时半会儿无从下手。 下面小编就带大家了解关于边缘检测算子的实现原理。由于边缘检测算子常…

相约脑暴会,共创大未来——动态实时三维人体重建脑暴会

今夏我们召集江湖中的有识之士&#xff0c;共同探讨动态实时三维人体重建制作容积视频的方案&#xff0c;展开一场别开生面的脑暴会。在此&#xff0c;我们向全球开发者发出诚挚邀请&#xff0c;邀请您加入我们周三&#xff08;8月2日&#xff09;晚上八点通过腾讯会议进行的脑…

多重背包二进制优化

可以将混合背包看作是一个特殊的多重背包&#xff0c;只要转化一下即可&#xff0c;将s-1转为1s0转化为m/v(最大可能装下的货物); 二进制优化的精髓就在于选择物品的次数&#xff0c;比如有s7&#xff0c;我们可以分为1&#xff0c;2 &#xff0c;4(二进制形式),1就代表选择一个…

HTTP协议+GET/POST区别

1. web开发流程 &#xff08;1&#xff09; HTML、CSS、JS、图片等资源通过浏览器进行整合&#xff0c;最终渲染出所需画面。 &#xff08;2&#xff09;浏览器对Web服务器进行资源请求 浏览器通过url请求资源。【HTTP协议、URL&#xff1a;确定唯一的一个资源】 浏览器请求…

DeepVO 论文阅读

论文信息 题目&#xff1a;DeepVO Towards End-to-End Visual Odometry with Deep Recurrent Convolutional Neural Networks 作者&#xff1a;Sen Wang, Ronald Clark, Hongkai Wen and Niki Trigoni 代码地址&#xff1a;http://senwang.gitlab.io/DeepVO/ (原作者并没有开源…

驶向专业:嵌入式开发在自动驾驶中的学习之道

导语: 自动驾驶技术在汽车行业中的快速发展为嵌入式开发领域带来了巨大的机遇。作为自动驾驶的核心组成部分&#xff0c;嵌入式开发在驱动汽车的智能化和自主性方面发挥着至关重要的作用。本文将探讨嵌入式开发的学习方向、途径以及未来在自动驾驶领域中的展望。 一、学习方向:…