[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QF0ojEiz-1650020556182)(https://user-gold-cdn.xitu.io/2018/2/5/161654f4c86ad32d?imageslim)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6XQbd5Oq-1650020556183)(https://user-gold-cdn.xitu.io/2018/2/5/161654f4c89b7b23?imageslim)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zCb45EBN-1650020556183)(https://user-gold-cdn.xitu.io/2018/2/4/16160b518ffb64b5?imageView2/0/w/1280/h/960/ignore-error/1)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lZMSf1Mt-1650020556184)(https://user-gold-cdn.xitu.io/2018/2/4/16160b518f69ecd0?imageView2/0/w/1280/h/960/ignore-error/1)]

github地址,觉得有帮助的可以给个 star 呗

[github.com/idic779/mon…](()

添加依赖

compile ‘com.github.idic779:monthweekmaterialcalendarview:1.7’

具体如何使用看[这里](()

这个库可以做什么?

  • 可以控制是否允许左右滑动,上下滑动,切换年月

  • 流畅的上下周月模式切换

  • 自定义日历样式

  • 基于[material-calendarview](() 这个库实现,可以根据需求定制效果

之前开发任务中有涉及到年月日日历的切换效果,由于是需要联动,想到的方向大概有3种,要么通过处理viewtouch事件,要么是通过自定义behavior去实现,要么是通过ViewDragHelper这个神器去实现,网上比较多的是通过自定义behavior去实现,本文使用的是第三种方法,实现的是一个可高度定制自由切换的周月日历视图,提供一种思路去实现页面联动效果。 ##准备
由于重点实现的是年月切换的效果,本来想着说可以自己写一个日历组件然后再加上ViewDragHelper,应该可以实现周月联动的效果吧?后面想了想,重点在切换那就干脆直接找个开源库稳定性好点的日历组件,所以用[github.com/prolificint…](()快4000start的库吧, ViewDragHelper,作为一个神器可以做很多的事情,官方的DrawerLayoutBottomSheetBehavior用他来实现,为什么用它?对于拖动某个View,如果是自己去重写touch事件的,计算滑 《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》开源 动距离再去移动View会需要处理比较多繁琐的代码去实现。如果我们用ViewDragHelper的话能很轻易的实现这样的效果。 简单的介绍下ViewDragHelper

ViewDragHelper helper= ViewDragHelper.create(this, 1.0f, new ViewDragHelper.Callback() {
@Override
public boolean tryCaptureView(View child, int pointerId) {
return true;
}
@Override
public int clampViewPositionHorizontal(View child, int left, int dx)
{
return left;
}

@Override
public int clampViewPositionVertical(View child, int top, int dy)
{
return top;
}
@Override
public int getViewHorizontalDragRange(View child) {
return super.getViewHorizontalDragRange(child);
}

@Override
public int getViewVerticalDragRange(View child) {
return super.getViewVerticalDragRange(child);
}

@Override
public void onViewPositionChanged(View changedView, int left, int top, int dx, int dy) {
super.onViewPositionChanged(changedView, left, top, dx, dy);
}

@Override
public void onViewReleased(View releasedChild, float xvel, float yvel) {
super.onViewReleased(releasedChild, xvel, yvel);
}
});

  • tryCaptureView():如果返回true,则说明可以捕获该view,我们可以在这里设置捕获的条件
  • clampViewPositionHorizontal ()``clampViewPositionV **Android开源项目《ali1024.coding.net/public/P7/Android/git》** ertical(): 分别对child水平和竖直方向移动的边界进行控制,例如限制周月移动的距离可以在这里做处理
  • onViewPositionChanged() : 当child的位置发生移动时候会回调这个方法
  • onViewReleased():手指释放时候的回调
  • getViewHorizontalDragRange()``getViewVerticalDragRange():返回child横向或者纵向移动的范围,大于0才能捕获。

更多的可以参考鸿洋的[Android ViewDragHelper完全解析 自定义ViewGroup神器](()

如何实现

既然选择ViewDragHelper要实现周月联动呢,我们来理一理要实现的效果,在月视图的时候,能够把下面的recyclerView上移拖到到周视图的高度,上移过程如果超过一定距离就默认滚动到周视图。 在周视图的的时候又能把recyclerView下移拖动到月视图的高度位置,下移过程如果超过一定距离就默认滚动到月视图。

整体分析

整个页面是由顶部的周名字的View、周模式的MaterialCalendarView、月模式的MaterialCalendarView和最下面的recyclerView组成 需要注意的是MaterialCalendarView 这个库原来是有周名字还有顶部显示日期的, 需要注意的是这里稍微做了下修改把这些给隐藏掉了,具体可以看MaterialCalendarView.setTopbarVisible()。并且做了下修改增加了获得单行的高度方法MaterialCalendarView.getItemHeight() ,即为周模式时显示的高度。

具体实现

  • 拖动前处理 整个页面只有recyclerView ,月模式下如果向上拖动时候如果recyclerView不是滚动到了顶部的话那么就不允许拖动,相关代码

@Override
public boolean tryCaptureView(View child, int pointerId) {
return !mDragHelper.continueSettling(true)
&&child == mRecyclerView && !animatStart
&& isAtTop(mRecyclerView) &&
!ViewCompat.canScrollVertically(mRecyclerView, -1);
}

  • 限制recyclerView移动的高度在周模式和月模式之间

@Override
public int clampViewPositionVertical(View child, int top, int dy) {
//决定竖直方向上能移动的距离为 finalWeekModeHeight到finalMonthModeHeight
int topBound = finalWeekModeHeight;
int bottomBound = finalMonthModeHeight;

最后

题外话,我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在IT学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多程序员朋友无法获得正确的资料得到学习提升,故此将并将重要的Android进阶资料包括自定义view、性能优化、MVC与MVP与MVVM三大框架的区别、NDK技术、阿里面试题精编汇总、常见源码分析等学习资料。

【Android思维脑图(技能树)】

知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。

【Android进阶学习视频】、【全套Android面试秘籍】

希望我能够用我的力量帮助更多迷茫、困惑的朋友们,帮助大家在IT道路上学习和发展
向。

[外链图片转存中…(img-yGfzEFLr-1650020556184)]

【Android进阶学习视频】、【全套Android面试秘籍】

希望我能够用我的力量帮助更多迷茫、困惑的朋友们,帮助大家在IT道路上学习和发展

纵享丝滑滑动切换的周月日历,水滴效果,丰富自定义日历样式相关推荐

  1. 纵享丝滑滑动切换的周月日历,可流畅滑动高度定制,仿小米日历,基于 material-calendarview

    monthweekmaterialcalendarview 项目地址:idic779/monthweekmaterialcalendarview  简介:纵享丝滑滑动切换的周月日历,可流畅滑动高度定制 ...

  2. 纵享丝滑滑动切换的周月日历,水滴效果,丰富自定义日历样式,仿小米日历(ViewDragHelper实现)...

    本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发 老规矩先贴效果图 github地址,觉得有帮助的可以给个 star 呗 github.com/idic779/mo ...

  3. android 涂鸦 卡顿,涂鸦框架的优化——解决绘制时的卡顿问题,纵享丝滑

    前言 V5.5: 增加优化绘制的选项,可优化绘制速度和性能,纵享丝滑. boolean optimizeDrawing = true; // 是否优化绘制,建议开启,可优化绘制速度和性能. Doodl ...

  4. typora+picgo+gitee搭建免费图床纵享丝滑

    typora+picgo+gitee搭建免费图床纵享丝滑 0.写在前面 由于之前自己在github搭了自己的博客,伴随之而来的一系列问题.如github不显示图片,github图床加载太慢等一系列问题 ...

  5. 让你的小米5纵享丝滑,可能是最快的小米5rom

    小米5刷原生7.1.1 ROM.配合xposed框架模块,非常的流畅!用纵享丝滑形容真不为过. 此标题是根据我的多次刷机实践得来的结果.话不多说先上几张GIF. 下面我上资源和教程: 首先手机要解锁刷 ...

  6. 阿里云数据库专家白宸:Redis带你尽享丝滑!(图灵访谈)

    访谈嘉宾: 本名郑明杭,现阿里云NoSQL数据库技术专家.先后从事Tair分布式系统.Memcached云服务及阿里云Redis数据库云服务开发,关注分布式系统及NoSQL存储技术前沿. 作为嘉宾,曾 ...

  7. 【达摩院OpenVI】几行代码,尽享丝滑视频观感

    团队模型.论文.博文.直播合集,点击此处浏览 随着网络电视.手机等新媒体领域的快速发展,用户对于观看视频质量的要求也越来越高.当前市面上所广为传播的视频帧率大多仍然处于20-30fps,已经无法满足用 ...

  8. 阿里云数据库专家白宸:Redis带你尽享丝滑!

    本文仅用于学习和交流目的,不得用于商业目的.非商业转载请注明作译者.出处,并保留本文的原始链接:http://www.ituring.com.cn/art... 访谈嘉宾: 本名郑明杭,现阿里云NoS ...

  9. 高通CVPR神研究:视频处理计算量降低78%,教卷积层自己“挑像素”,卡成PPT的视频纵享丝滑...

    萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 图像领域,已经限制不住AI算法大牛们的身手了. 现在,随着视频产业火热发展,相关算法也正成为计算机视觉研究的新潮流. 毕竟日常生活中,无论是 ...

最新文章

  1. python库学习笔记——分组计算利器:pandas中的groupby技术
  2. postgres 退出_如何退出postgresql
  3. Cloudera Manager是什么?
  4. Windows XP SP3?转自作者: 孤单的鸽子,  出处:天极yesky, 责任编辑: 袁绍龙
  5. [转]IaaS、PaaS、SaaS、CaaS、MaaS五者的区别
  6. 结构体中.和-的用法
  7. 可缺一台洗衣机的ykcchf
  8. silverlight中DataGrid错误:data未定义
  9. 大数据之-Hadoop3.x_MapReduce_Combiner案例---大数据之hadoop3.x工作笔记0119
  10. leetcode949. Largest Time for Given Digits
  11. 我的世界javamod怎么装_你不装绞盘,怎么在越野圈混?
  12. Excel基础(10)SUMIF函数
  13. 怎么关闭计算机安全,电脑中安全防护怎么关闭
  14. 牛腩老师讲B/S开发小结 触发器 主键 外键
  15. 浙江大学 工程伦理 第二章单元测试答案
  16. java循环例题while型_Java基础--while、do-while、for循环结构(附例题)
  17. 澳大利亚种植最辣辣椒 制作辣酱需穿防护服
  18. 产品说接口返回数据需要脱敏 只能安排
  19. 程序员该如何有效的找工作?
  20. 昆仑通泰(MCGS)官方资料

热门文章

  1. CSS实现比翼双飞和圣杯布局模型效果
  2. C语言char指针的使用
  3. 物联网新秀—辽宁奥普泰,全新工作模式亮相│2021CPSE安博会现场直击
  4. 推荐算法实战项目:用户协同过滤(UserCF)原理以及案例实战(附完整 Python 代码)
  5. ARP与RARP 协议
  6. 构建万物可信的基石:解密区块链跨链技术
  7. 所有工程师在FEA之前应了解的6件事
  8. 剑指Offer——股票的最大利润(JS实现)
  9. lint 代码审查工具
  10. linux下无法进入文件夹 No such file or directory