最近需要实现一个城市列表的快速索引功能。类似于联系人应用,根据姓名首字母快速索引功能。

要实现这个功能只需要解决两个问题:
1、对列表进行分组(具有同一特征),并且能够快速定位到该组的第一项 2、右侧分组‘特征’快速索引栏的实现
第一个问题比较好解决,列表项可以根据相同的‘特征’来分组,比如说城市列表可以根据相同首字母的城市名来进行分组。 如何来定位到分组的第一项,只需要把分组的‘特征’和分组第一项下标关联起来,快速索引栏就能快速定位分组第一项
第二个问题可以通过自定义控件来实现,实现的形式有很多,可以通过绘制一整张分组‘特征’的图片(难以扩展),也可以动态来绘制每一个分组‘特征’(可扩展性强)
下面是一些实现的关键代码,基本上就是上面思想的体现,如果自己有特殊的需求话,稍做改动就能行

列表‘特征’和分组首项进行关联

?
1
2
3
4
5
6
7
8
9
for (int i = 0; i < mCitys.size(); i++) {
    City city = mCitys.get(i);
    String cityId = city.getId();
    if(cityId == null || .equals(cityId)) continue;
    String section = cityId.toUpperCase().substring(0, 1);
    if(!indexMap.containsKey(section)){
        indexMap.put(section, i);
    }
}

快速索引的绘制

?
1
2
3
4
5
6
7
8
9
@Override
protected void onDraw(Canvas canvas) {
    heightCenter = getMeasuredHeight()/2 - preHeight*WORDS.length/2;
    for (int i = 0; i < WORDS.length; i++) {
        canvas.drawText(String.valueOf(WORDS[i]), getMeasuredWidth()/2, preHeight
                + (i * preHeight) + heightCenter, mPaint);
    }
    super.onDraw(canvas);
}

用户交互,快速定位到索引项

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public boolean onTouchEvent(MotionEvent event) {
    int startY = (int) event.getY() - heightCenter;
    int index = startY / preHeight;
    if (index >= WORDS.length) {
        index = WORDS.length - 1;
    } else if (index < 0) {
        index = 0;
    }
    if (event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_MOVE) {
        int position = mSectionIndexter.getStartPositionOfSection(String.valueOf(WORDS[index]));
        if (position == -1) {
            return true;
        }
        mListView.setSelection(position);
    }
    return true;
}

效果图如下:

结伴旅游,一个免费的交友网站:www.jieberu.com

推推族,免费得门票,游景区:www.tuituizu.com

转载于:https://www.cnblogs.com/rabbit-bunny/p/4191595.html

Android 快速索引(城市列表和联系人)相关推荐

  1. Android自定义滚动条——城市列表

    Android自定义滚动条--城市列表 效果视频 绘制滚动条 区别选中与未选择文字 绘制等高间距 滑动事件监听 解析承载城市数据的XML文件 下载XML文件 解析文件 适配器 建立适配器类 适配器子项 ...

  2. Android仿微信实现快速索引选择联系人

    Android仿微信实现快速索引选择联系人 原创 2016年03月05日 13:19:20 1640 3 1 一.概述 先看效果图,然后在给大家慢慢介绍  二.实现 先给大家说说这些城市的数据是怎么来 ...

  3. android 仿微信联系人 首字母分组快速索引

    总结是一种习惯,不能停,一停人就懒了,都快一个月没有写了!该提提神了! 进入正题:android 仿微信联系人 首字母快速索引,先用下美团的索引效果图: 1.自定义View字母索引栏(右边那一列): ...

  4. Android 城市列表选择

    最近开发一个城市选择的功能,找了这个文章 Android 城市列表选择 结果发现它使用的拼音转换库pinyin4j有一个很严重的问题,竟然长沙chang sha识别为zhang sha,结果长沙北分在 ...

  5. html城市手机搜索,原生js实现html手机端城市列表索引选择城市

    本文实例为大家分享了js实现手机端城市列表索引选择城市的具体代码,供大家参考,具体内容如下 html部分: 定位城市 上海市 css部分: *{ margin: 0; padding: 0; list ...

  6. 微信小程序点击--实现带字母索引的城市列表

    哈哈 先上图看看是不是这种效果   因为比较穷 所以录制的gif格式图片有水印 之前在网上搜索了好多这种格式的,感觉代码都好多  如果只是点击然后跳转到相应的位置是比较简单的 主要用到的知识就是 sc ...

  7. VUE+MintUI的索引列表实现“卖座网”同款城市列表

    卖座网:https://m.maizuo.com/v5/#/city(F12拿城市列表JSON) MintUI索引列表:https://elemefe.github.io/mint-ui/#/inde ...

  8. uni-app - 城市选择索引列表 / 通过 A-Z 排序的城市列表(uview 组件库 IndexList 索引列表)

    前言 由于考虑到各端平台兼容性及其代码健壮性(无BUG),故采用 uview 组件库的 IndexList 索引列表 组件作为 "底层" 支持,在此基础上二次封装,可靠性及稳定性毋 ...

  9. Android城市列表,首字母排序,右侧点击字母定位

    效果图: 自动定位(百度地图)+列表选择 思路: 1.请求到的城市列表,提取首字母 2.城市列表比较混乱,先使用实体类把相同首字母的城市放到一起 3.显示城市列表 4.使用QuicLocationBa ...

  10. 仿小米相册列表实现自定义带快速索引功能的RecyclerView

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 篇章目标要点 一.实现效果 二.设计布局原理 三.关键代码实现 1.浮标随手势移动 2.浮标随列表移动 3.列表随浮标移动而 ...

最新文章

  1. SKU表管理之保存SKU表数据
  2. How to reduce Index size on disk?减少ES索引大小的一些小手段
  3. 迷你图标集大集合:5000+ 30套免费的图标
  4. idea2020配置springboot热部署超全步骤以及安装JRebel插件
  5. MyBatisPlus分页
  6. 如何用Linux命令行管理网络:11个你必须知道的命令
  7. 5G基站功耗,到底有多大?
  8. jQuery 页面载入进度条 (必有一款适合你----综合搜集版)
  9. 开源php todo,TODO:当PHP遇上IIS
  10. 【java】方法中参数列表的应用
  11. R语言数据框行转列实例
  12. 公众平台服务号、订阅号、企业微信、小程序的区别
  13. 服务器过载或维修,服务器过载怎么解决
  14. Boost.Asio的使用技巧
  15. c++ 统计指定字母开头单词的数量
  16. uis向3d投影全息界面的连续演化。
  17. spark.yarn.archive spark.yarn.jars
  18. 共同好友(java)
  19. 车牌识别技术栈研究报告
  20. 数字图像处理_Matlab——车牌识别分析

热门文章

  1. 小程序源码:收款码三合一制作
  2. 关于Coolie编码
  3. Flink Window TOPN: The window can only be ordered in ASCENDING mode.
  4. 用代码实现通过人人网的登录
  5. 公司不是家——联想员工亲历2004年联想大裁员【转载】
  6. 计算机显示不出桌面的文件夹,win10电脑保存文件路径不显示桌面怎么办?
  7. roundcube db.inc.php,roundcube 邮箱 用户不能修改密码
  8. ACM中国国家集训队论文集目录(1999-2009)
  9. Windows XP几个版本的区分
  10. Matlab中median函数的使用