代码源自下面链接,略有改动
https://github.com/liuwan1992/CustomDatePicker/tree/update_20181221
一.功能实现
1.实现数字轮盘滚轮效果选取时间
2.自定义显示年月日分秒中的任意单位
3.自定义是否可循环
4.实现选中时候的动画效果
二.大体思路
1.PickerView(实现对单个滚盘的视图和功能编写):
1.先自定义一个View来装数字,重写里面的onDraw和onMeasure方法把框架先画出来(当然,其中还有众多细节后面具体说)
2.自定义一个DrawText方法来画数字,数字的表现形式等都在里面设置,然后在绘画的时候调用此方法来
完成上面两步之后自定义View大体的轮廓就已经出来了
3.实现添加数据的方法
4.实现调整data数组的函数
这里说一下这个demo里设计数据的思路 : 因为一次显示五个数,中间的是选中的,而轮盘又要实现从上到下数字递增,所以为了保证能拿到已经选中的数字的前后四个数据,我们可以让选中的数据一直在数组的中间,比如如果轮盘上滑,数字要变大这个时候把头部data[0]的数据删除然后插到末尾,就可以保持选中的数字一直在数组中间(上滑同理)
5.实现闪烁的动画效果
6.实现滚动的动画效果(这里主要是通过重绘View实现的)
到上面我们只是实现了对View的绘图和相关功能的设置,接下来要把他安装到CustomDatePicker中
2.CustomDatePicker(控制整个Dialog)
Dialog中要对整个整体功能进行编写,在单个itemi已经实现了的情况下,该方法的主要任务是对Dialog进行加载初始化以及相关功能的编写
1.对Dialog的构造器进行自定义,自定义方法都要在这里间接执行,要进行加载页面和设置数据给每一个PickerItem
2.对Dialog的打开进行包装(内部加上show方法)
3.对年月日时分(不用item)的自定义显示进行设置,同时他们之间的联动动画效果的调用也在这里
4.写Destroy方法来回收关闭内存中的东西
3.MainActivity
在活动中直接调用CustomDatePicker然后调用包装show的函数即可,同时也可以对相关东西功能进行自定义打开关闭
三.具体的代码实现
具体的内容直接看注释,每个方法都有详细的注释,下面主要讲大体思路:
1.在PickerView中
1.1实现图的绘制
1.2实现数据的设置
1.3实现动画效果函数的写法(注意在数据更新时用invalidate可以实现滚动效果,原理这里不展开谈)
总之,直线的功能都是关于PickerView这个自定义控件相关布局和功能的设置
2.CustomDatePicker(主要是自定义的Dialog)
2.1实现自定义的Dialog的布局属性
2.2初始化相关控件
2.3.设置相关的点击事件
2.4.重写onSelect方法来将选定后的数据进行处理
2.5,设置关联的动画
四.一些日后补充的内容
1.关于dialog的style的设置代码
<style name="date_picker_dialog" parent="android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowBackground">@color/date_picker_bg</item>//这行代码如果不写的话dialog宽度不能铺满屏幕
</style>