那么多轮子都没有满足需求的,只能自己造。
自定义Android日历,只有一个CalendarView,非常小巧。核心代码400行左右,主要就是画。

CSDN: https://blog.csdn.net/lylddingHFFW/article/details/88227283
GitHub: https://github.com/lyldding/CalendarView

功能:支持左右滑动切换月份,上下滑动切换年份,设置背景,边框,周末或周一为第一天,显示其他月份日期等功能。 具体参考Api或者自定义。

/*** 显示选中日期*/private boolean isShowSelectDate = true;private int selectBackgroundColor = 0xff1157cb;private int selectTextColor = Color.RED;/*** 显示当前日期*/private boolean isShowCurrentDate = true;private int currentBackgroundColor = 0xff1157cb;private int currentTextColor = Color.RED;/*** 显示边框*/private boolean isShowBorder = false;private int borderColor = Color.GRAY;/*** 切换上下月按钮时滑动*/private boolean isBtnSwitchMonthScroll = true;/*** 显示其他月份日期*/private boolean isContainOtherMonthDate = true;private int otherMonthTextColor = Color.LTGRAY;/*** 周日为第一天,false 周一为第一天*/private boolean isSundayAtFirst = true;/*** 当前月日期颜色*/private int currentMonthDayTextColor = Color.BLACK;/*** 年月标题的字体size dp*/private int titleTextSize = 15;/*** 整体星期标题的背景色*/private int weekBackgroundColor = 0xff88baff;/*** dp*/private int weekTextSize = 9;/*** 整体日历的背景色*/private int background = Color.WHITE;/*** 整体日历的背景圆角dp*/private int backgroundRadius = 3;/*** dp*/private int dayTextSize = 12;

大致思路:(主要分为5个区域)
1,初始化时计算每个区域每个Item的具体位置,并缓存。
2,红色年月为显示区域,在更新时同步更新其他四个区域的日期,并缓存。
3,处理移动和绘制。

代码简述:(具体看源码吧,核心代码400行左右)
1,计算各个Item的具体位置,并更新月份信息

private void computeData() {mViewRectF.set(0 + mStrokeWidth / 2f, 0 + mStrokeWidth / 2f, mViewWidth - mStrokeWidth / 2f, mViewHeight - mStrokeWidth / 2f);mViewWidth = (int) mViewRectF.width();mItemWidth = mViewWidth / CalendarUtils.WEEK_COLUMN;computeTitleData();computeWeekData();computeDayData();updateMonthData(mCurrentYear, mCurrentMonth, Type.NONE);
}

2,绘制各个部分:背景,年月和切换按钮,星期,日期。

protected void onDraw(Canvas canvas) {mIsDrawing = true;drawBackground(canvas);drawDataStr(canvas);drawSwitchButton(canvas);drawWeek(canvas);drawAllDay(canvas);drawOuterLine(canvas);mIsDrawing = false;
}

定制Android日历,只有一个View,非常小巧相关推荐

  1. android sqlite自定义函数,Android中自定义一个View的方法详解

    本文实例讲述了Android中自定义一个View的方法.分享给大家供大家参考,具体如下: Android中自定义View的实现比较简单,无非就是继承父类,然后重载方法,即便如此,在实际编码中难免会遇到 ...

  2. android动画view上移,在Android开发中使用View制作一个引导动画

    在Android开发中使用View制作一个引导动画 发布时间:2020-11-20 16:46:16 来源:亿速云 阅读:98 作者:Leah 这篇文章将为大家详细讲解有关在Android开发中使用V ...

  3. [Android]如何做一个崩溃率少于千分之三噶应用app(15)-View分发module架构

    以下是我这个系列的相关文章,有兴趣可以参考一下,可以给个喜欢或者关注我的文章. [Android]如何做一个崩溃率少于千分之三噶应用app--章节列表 这个系列的有关架构的概念,适合有大概 三年以上A ...

  4. android 日历_适用于Android的十大最佳日历应用

    android 日历 Looking for the best calendar apps for Android? You're in the right place! Let's get righ ...

  5. Android开发自定义的View

    2019独角兽企业重金招聘Python工程师标准>>> 当开发者打算派生自己的UI组件时,首先定义一个继承View基类的子类,然后重写View类的一个或多个方法,通常可以被用户重写的 ...

  6. 日历控件的android代码,Android日历控件PickTime代码实例

    Android日历控件PickTime代码实例 发布时间:2020-10-03 16:05:51 来源:脚本之家 阅读:86 作者:手撕高达的村长 最近做项目,需要设置用户的生日,所以做这样一个功能. ...

  7. Android日历视图

    In this tutorial, we'll be discussing the Calendar Widget using the CalendarView class in our Androi ...

  8. 【转】高手速成android开源项目【View篇】

    主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar及其他如Dialo ...

  9. 高手速成android开源项目【View篇】(转)

    主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar及其他如Dialo ...

最新文章

  1. Reids报错解决:Job for redis-server.service failed because the control process exited with error code.
  2. pdf转换为html5,PDF转换为HTML5的四种方式
  3. 在 win10 环境下,设置自己写的 程序 开机自动 启动的方法
  4. easyui复杂表单_EasyUI中实现form表单提交的示例分享
  5. Linux 性能监测:Memory
  6. opencv 叠加两张图_「干货」教你如何用OpenCV快速寻找图像差异处
  7. wifi rssi 计算 距离_PPT|交通未来第3期 基于实时WIFI蓝牙检测数据的交通目标定位及出行模式甄别技术...
  8. android 解决Date.gettimezoneoffset已经废弃
  9. SpringAOP xml 方式和注解简单实现日志处理
  10. 学工在线新闻搜索引擎0.1 beta版
  11. Java基础——注解的初步认识
  12. VScode同步配置和插件步骤
  13. Spring Boot与Docker(一):微服务架构和容器化概述
  14. html图片滚动暂停,怎么设置鼠标悬停时滚动的图片或文字停止?
  15. Proteus仿真:行列式键盘
  16. InfoPath 2007表单应用
  17. 【Python】解决使用 plt.savefig 保存图片时一片空白
  18. 基因数据处理8之BWA_MEM小数据集处理(成功)
  19. 基于神经网络的图像去水印/图像修复实践
  20. Hadoop垃圾回收站与YARN日志聚合

热门文章

  1. ECDH KDF java_java-ECDH使用Android KeyStore生成的私钥
  2. 绝了 麦肯锡放话:会Python,直接内推
  3. 大数据可视化大屏设计经验分享
  4. Win8PE启动维护工具|WinXP_03PE下载|U盘启动装系统
  5. Exp-00079解决方法
  6. Java每日一题 Day_9
  7. 六旋翼无人机(无人机应急基站)或巡检无人机
  8. SpringBoot2.x系列教程(三十七)SpringBoot web之网站图标(Favicon)配置
  9. 当百度大脑小度完胜人类《最强大脑》
  10. IT领域中哲学原理的应用——个体与整体