Android 自定义日历控件,高度固定,内容根据日历4/5/6动态变化

最近一直在未没有女票的事发愁。又赶上要做新APP,过产品稿时,我也心不在焉。讲到日历的时候,产品说听下技术的建议,日历是做成高度随内容变化的,还是高度固定内容变化的,我没有做过自定义日历,不知道里面的道道,然后其他同事都说高度固定的好做,结果就定下来了。结果分任务的时候,嚷嚷着好做的同事谁都没接,分给了我(当时我以为是照顾我这个小菜鸟,感动的差点哭一鼻子),结果网上搜了一圈,老哥没有啊。高度变化的好看又好用,即使是固定高度的,也是显示6行,4行时两行置灰(5行时置灰一行),此时我才感觉是不是各位老哥在给我挖坑,因为听说简单,要了一天的时间(当时还高兴,又能待半天)。哎,我绝对不会承认我加班的事的,真的,这辈子也不能加班啊。 撤了半天,都没说点正事。OK,先直接上产品稿和设计图,有相似功能的小伙伴们先看看产品稿和设计图是不是有点相似,如果差别不大,那接下来的就对你有帮助了。 产品稿

设计图
如果你看到这里,估计是相似度挺高的。 那接下来呢,我就说下你需要根据需要配置的信息。 1、在color中配置使用到的几种颜色值

<!--过去的时间字体颜色-->
<color name="yesterday">#ff222222</color>
<!--将来的时间字体颜色-->
<color name="tomorrow">#ff999999</color>
<!--当前日期字体颜色,选中-->
<color name="today_select">#fff</color>
<!--当前日期字体颜色,未选中-->
<color name="today_unselected">#ffff6600</color>
<!--圆圈的颜色-->
<color name="round">#FFFF6600</color>
<!--农历月份字体颜色,因为这里没有用所以设置为了透明-->
<color name="month_lunar">#0000</color>
复制代码

2、在Constant中配置 public static final int MONTHLUNAR=5;//农历字体大小

public static final float DOT=4f;//圆点标记的半径

public static final boolean ROUND_SQUARE=true;//圆形标记 true 方形标记 false

public static final float ROUND=32.0f;//圆圈标记的半径

public static final float OFFSET=16f;//圆圈标记的向上偏移量

public static final float FOUR=50f;//4行时,item的高度

public static final float FIVE=45f;//5行时,item的高度

public static final float SIX=37f;//6行时,item的高度
复制代码

3、在activity中添加小圆点(可以请求数据后添加,可多次设置,但只显示最后的结果,不会叠加)

protected void initData() {
    final List<Calendar> schemes = new ArrayList<>();
    final int year = mCalendarView.getCurYear();
    final int month = mCalendarView.getCurMonth();
    //参数分别表示,年,月,日,颜色,事件(这里事件没有绘制)
    schemes.add(getSchemeCalendar(year, month, 3, 0xffd5d5d5, "课"));
    schemes.add(getSchemeCalendar(year, month, 6, 0xffd5d5d5, "课"));
    schemes.add(getSchemeCalendar(year, month, 9, 0xffd5d5d5, "课"));
    mCalendarView.setSchemeDate(schemes);
}

private Calendar getSchemeCalendar(int year, int month, int day, int color, String text) {
    Calendar calendar = new Calendar();
    calendar.setYear(year);
    calendar.setMonth(month);
    calendar.setDay(day);
    calendar.setSchemeColor(color);//如果单独标记颜色、则会使用这个颜色
    calendar.setScheme(text);
    return calendar;
}
复制代码

4、到这里基本够用了(如果还需要其他功能,那只能自己动手丰衣足食了),估计你肯定会说“你TM也没说如何实现的啊,信不信我打死你”。但是我想,我说半天怎么用的要是不上代码你还是会打死我吧?所有我决定不说实现直接上GitHub地址(代码不多,自己看咯) 代码下载地址:https://github.com/lpl0129/calendarview 5、非常重要 强烈推荐自定义日历控件CalendarView,因为我借鉴和使用了很多项目代码。 https://github.com/huanghaibin-dev/CalendarView 同时附上一篇介绍CalendarView如何使用的博客 https://blog.csdn.net/huanghaibin_dev/article/details/79040147

转载于:https://juejin.im/post/5b6184fbf265da0f455a1ddb

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值