纵享丝滑滑动切换的周月日历,水滴效果,丰富自定义日历样式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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种,要么通过处理view
的touch
事件,要么是通过自定义behavior
去实现,要么是通过ViewDragHelper
这个神器去实现,网上比较多的是通过自定义behavior
去实现,本文使用的是第三种方法,实现的是一个可高度定制自由切换的周月日历视图,提供一种思路去实现页面联动效果。 ##准备
由于重点实现的是年月切换的效果,本来想着说可以自己写一个日历组件然后再加上ViewDragHelper
,应该可以实现周月联动的效果吧?后面想了想,重点在切换那就干脆直接找个开源库稳定性好点的日历组件,所以用[github.com/prolificint…](()快4000start的库吧, ViewDragHelper
,作为一个神器可以做很多的事情,官方的DrawerLayout
,BottomSheetBehavior
用他来实现,为什么用它?对于拖动某个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道路上学习和发展
纵享丝滑滑动切换的周月日历,水滴效果,丰富自定义日历样式相关推荐
- 纵享丝滑滑动切换的周月日历,可流畅滑动高度定制,仿小米日历,基于 material-calendarview
monthweekmaterialcalendarview 项目地址:idic779/monthweekmaterialcalendarview 简介:纵享丝滑滑动切换的周月日历,可流畅滑动高度定制 ...
- 纵享丝滑滑动切换的周月日历,水滴效果,丰富自定义日历样式,仿小米日历(ViewDragHelper实现)...
本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发 老规矩先贴效果图 github地址,觉得有帮助的可以给个 star 呗 github.com/idic779/mo ...
- android 涂鸦 卡顿,涂鸦框架的优化——解决绘制时的卡顿问题,纵享丝滑
前言 V5.5: 增加优化绘制的选项,可优化绘制速度和性能,纵享丝滑. boolean optimizeDrawing = true; // 是否优化绘制,建议开启,可优化绘制速度和性能. Doodl ...
- typora+picgo+gitee搭建免费图床纵享丝滑
typora+picgo+gitee搭建免费图床纵享丝滑 0.写在前面 由于之前自己在github搭了自己的博客,伴随之而来的一系列问题.如github不显示图片,github图床加载太慢等一系列问题 ...
- 让你的小米5纵享丝滑,可能是最快的小米5rom
小米5刷原生7.1.1 ROM.配合xposed框架模块,非常的流畅!用纵享丝滑形容真不为过. 此标题是根据我的多次刷机实践得来的结果.话不多说先上几张GIF. 下面我上资源和教程: 首先手机要解锁刷 ...
- 阿里云数据库专家白宸:Redis带你尽享丝滑!(图灵访谈)
访谈嘉宾: 本名郑明杭,现阿里云NoSQL数据库技术专家.先后从事Tair分布式系统.Memcached云服务及阿里云Redis数据库云服务开发,关注分布式系统及NoSQL存储技术前沿. 作为嘉宾,曾 ...
- 【达摩院OpenVI】几行代码,尽享丝滑视频观感
团队模型.论文.博文.直播合集,点击此处浏览 随着网络电视.手机等新媒体领域的快速发展,用户对于观看视频质量的要求也越来越高.当前市面上所广为传播的视频帧率大多仍然处于20-30fps,已经无法满足用 ...
- 阿里云数据库专家白宸:Redis带你尽享丝滑!
本文仅用于学习和交流目的,不得用于商业目的.非商业转载请注明作译者.出处,并保留本文的原始链接:http://www.ituring.com.cn/art... 访谈嘉宾: 本名郑明杭,现阿里云NoS ...
- 高通CVPR神研究:视频处理计算量降低78%,教卷积层自己“挑像素”,卡成PPT的视频纵享丝滑...
萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 图像领域,已经限制不住AI算法大牛们的身手了. 现在,随着视频产业火热发展,相关算法也正成为计算机视觉研究的新潮流. 毕竟日常生活中,无论是 ...
最新文章
- python库学习笔记——分组计算利器:pandas中的groupby技术
- postgres 退出_如何退出postgresql
- Cloudera Manager是什么?
- Windows XP SP3?转自作者: 孤单的鸽子, 出处:天极yesky, 责任编辑: 袁绍龙
- [转]IaaS、PaaS、SaaS、CaaS、MaaS五者的区别
- 结构体中.和-的用法
- 可缺一台洗衣机的ykcchf
- silverlight中DataGrid错误:data未定义
- 大数据之-Hadoop3.x_MapReduce_Combiner案例---大数据之hadoop3.x工作笔记0119
- leetcode949. Largest Time for Given Digits
- 我的世界javamod怎么装_你不装绞盘,怎么在越野圈混?
- Excel基础(10)SUMIF函数
- 怎么关闭计算机安全,电脑中安全防护怎么关闭
- 牛腩老师讲B/S开发小结 触发器 主键 外键
- 浙江大学 工程伦理 第二章单元测试答案
- java循环例题while型_Java基础--while、do-while、for循环结构(附例题)
- 澳大利亚种植最辣辣椒 制作辣酱需穿防护服
- 产品说接口返回数据需要脱敏 只能安排
- 程序员该如何有效的找工作?
- 昆仑通泰(MCGS)官方资料