自定义DatePicker和TimePicker


代码源自下面链接,略有改动

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>

文章作者: 灿若星河
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 灿若星河 !
评论
 上一篇
自定义Dialog 自定义Dialog
更详细的方法日后再更新,下面的代码主要出自DatePicker的那个自定义Dialog一.style部分的核心代码 <style name="date_picker_dialog" parent="android:style/Th
2020-10-30
下一篇 
时间选择器demo中函数用法 时间选择器demo中函数用法
1.DecimalFormat的用法:https://www.jianshu.com/p/b3699d73142e 2.Timer与TimerTask的真正原理&使用介绍:https://blog.csdn.net/xieyuooo
2020-10-25 灿若星河
  目录