自定义三级联动地址选择器
来源:互联网 发布:单片机地址寄存器 编辑:程序博客网 时间:2024/06/05 18:45
view的来源gif图:
标本地址选择器.gif
看到这的时候,我就大致有点思路了,所以自己的地址选择器view也是能登场了。
自己撸的地址选择器view.gif
由于这个地址的数据量太大了,我就随便弄了几个城市的数据。后续可以继续添加其他的数据。
使用
布局:
对MultiSelectView选中内容的监听
数据源的处理:
2
讲解
在讲解之前还是来一个整个view的布局情况草图:
MultiSelectView布局分布图.png
从这里不难发现外层是一个ViewGroup,里面是三个我们需要滑动处理的View了。
添加3个MultiSelectItem的view
对3个MultiSelectItem的view测量
对3个MultiSelectItem的view进行layout
MultiSelectView代码也太简单了点吧,没错,这就是Viewgroup三步曲代码。
对于父Viewgroup的三步曲代码已经搞定了,下面要进入到子View(MultiSelectItem)的代码中去看看了,首先完成下静态的分行处理,分行处理其实就是画行数-1条横线了。
画横线:
绘制内容:
上面的绘制代码中,有两个变量offset、diffY,offset是当前view滑动到的位置,也即是我们第一个item的起点坐标,diffY是每一行需要的高度,可以看下他们的初始化的值。
offset和diffY初始化:
知道了这两个变量后,咋们再来看下绘制内容的代码,首先在遍历数据源的时候,有越界的判断,分别是有四种情况是在绘制区域外的:
offset + i * diffY > height:item的上边缘在height之下
(offset + i * diffY) + diffY < 0:item的下边缘在0之上
(offset + i * diffY == height):item的上边缘在height位置
(offset + i * diffY) + diffY == 0:item的下边缘在0这个位置
这里给一个offset初始状态下(offset=h * 1.0 / DEFRAULT_DISPLAY_COUNT)的草图出来,这里只画一个MultiSelectItem的情况:
初始状态下数据源分布情况.png
滑动处理:
滑动过程中对offset的处理:
上面代码就是onMove的操作处理,其中上面有offset临界值处理:
maxOffset:滑动的最大的位置
minOffset:滑动的最小的位置
这两个值是哪来的呢:
这里我画两张草图大家就知道这两个临界值是怎么回事了:
offset<= minOffset图解.png
offset>=maxOffset图解(图中数据源假如是6个).png
相信看图能知道是怎么回事了吧,临界值就是这么来的。
上面的move操作里面还进行了一个currentIndex的处理,当认为Math.abs(offset) % diffY <= maxDeviation的时候,则需要重新获取新的被选中的index了。
抬起过程中对offset的处理:
对于MultiSelectItem整个代码基本就是这些了,可能还就是一些数据源的初始化和变量的一些初始化没说了,重点都已经介绍完了。
剩下还有MultiSelectView中被选中时的数据回调了,这里我就直接贴代码了:
- 自定义三级联动地址选择器
- Android ListView三级联动,实现自定义地址选择器
- 三级联动的地址选择器
- Android 地址选择器,实现省市区三级联动
- Android 地址选择器,实现省市区三级联动
- 微信小程序三级联动地址选择器
- 一个三级联动的地址选择器
- 安卓选择器类库,包括日期选择器、时间选择器、单项选择器、数字选择器、二三级联动选择器、省市区地址选择器、颜色选择器、文件目录选择器等,可自定义顶部及底部界面,可自定义窗口动画
- 安卓选择器类库,包括日期时间选择器、单项选择器、二三级联动选择器、地址选择器、颜色选择器、文件目录选择器、数字选择器等,可自定义顶部及底部界面,可自定义窗口动画。
- 省市选择器三级联动
- 使用listview实现简单的三级地址联动选择器
- 三级联动地址选择器,遇到的问题记录
- 使用pickerview实现(省市区)地址选择器的三级联动
- 微信小程序开发之三级联动地址选择器
- weex 实现仿ios 三级联动地址选择器
- 全国地址三级联动
- 地址选择 三级联动
- js 地址三级联动
- mycat启动报Unable to start JVM: No such file or directory (2)
- 京东猪脸识别比赛数据预处理:用Python将视频每一帧提取存储为图片
- ssh--国际化
- springboot使用generator-mybatis插件自动生成mybatis文件
- 第11周 第三项 数据结构例程——图的遍历
- 自定义三级联动地址选择器
- WebSocket发送文字图片功能
- android wifi 的链接
- 路由音乐切换
- DARLA 源码解析
- imooc的疯狂的蚂蚁的课程《Python操作MySQL数据库》 python3+pymysql模块来操作mysql数据库
- 第13周项目1- 验证算法(3)
- 无限轮播
- 云星数据---Scala实战系列(精品版)】:Scala入门教程007-Scala数组详解006