QuickIndex 通讯录快速检索

欢迎入群交流

public class QuickIndexBar extends View {private String[] indexArr = {"A", "B", "C", "D", "E", "F", "G", "H","I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U","V", "W", "X", "Y", "Z"};Paint paint = null;int ColorDefault = Color.GRAY;//默认颜色int ColorPressed = Color.BLUE;//按下颜色public QuickIndexBar(Context context) {this(context, null);}public QuickIndexBar(Context context, @Nullable AttributeSet attrs) {this(context, attrs, 0);}public QuickIndexBar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);paint = new Paint(Paint.ANTI_ALIAS_FLAG);//设置抗锯齿paint.setColor(ColorDefault);int size = getResources().getDimensionPixelSize(R.dimen.text_size);paint.setTextSize(size);//文字绘制的默认起点是文字的左下角,CENTER表示底边的中心,而不是正中心paint.setTextAlign(Paint.Align.CENTER);//Baseline:基准线}float cellHeight;//一个格子的高度@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);cellHeight = getMeasuredHeight() * 1f / indexArr.length;}@Overrideprotected void onDraw(Canvas canvas) {//遍历绘制26个字母for (int i = 0; i < indexArr.length; i++) {String text = indexArr[i];float x = getMeasuredWidth() / 2;//整个宽的一半//格子高度一半+文字高度一半+i*格子高度int textHeight = getTextHeight(text);float y = cellHeight / 2 + textHeight / 2 + i * cellHeight;//变色paint.setColor(i == index ? ColorPressed : ColorDefault);canvas.drawText(text, x, y, paint);}}int index = -1;//用来记录触摸的索引的@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:case MotionEvent.ACTION_MOVE:int temp = (int) (event.getY() / cellHeight);if (temp != index) {index = temp;//对index进行一下安全性的检查if (index >= 0 && index < indexArr.length) {String word = indexArr[index];if (listener != null) {listener.onLetterChange(word);}}}break;case MotionEvent.ACTION_UP://抬起重置变量index = -1;break;}//重绘invalidate();return true;}/*** 获取文字的高度** @param text* @return*/private int getTextHeight(String text) {Rect bounds = new Rect();paint.getTextBounds(text, 0, text.length(), bounds);//对bounds进行赋值return bounds.height();}private OnLetterChangeListener listener;public void setOnLetterChangeListener(OnLetterChangeListener listener) {this.listener = listener;}public interface OnLetterChangeListener {void onLetterChange(String word);}}

微信公众号(他晓),关注并转发,谢谢

QuickIndex 通讯录快速检索相关推荐

  1. Android自定义控件之实现快速检索

    前言:关于这个快速检索我们平常见到的app应用的很多,比如手机通讯录联系人.微信朋友,以及其他的商品列表等,实现的功能就是通过右侧或者左侧的字母进行快速检测,OK!今天我就带领大家来实现这个功能! - ...

  2. Elasticsearch 如何做到快速检索 - 倒排索引的秘密

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:https://ricstudio.top/archives/es-lucene-reverted-index 一.前言 最近 ...

  3. Elasticsearch 为什么能做到快速检索?— 倒排索引的秘密

    来源:https://ricstudio.top/archives/es-lucene-reverted-index "All problems in computer science ca ...

  4. Elasticsearch 如何做到快速检索?

    " 最近接触的几个项目都使用到了 Elasticsearch (以下简称 ES ) 来存储数据和对数据进行搜索分析,就对 ES 进行了一些学习.本文整理自我自己的一次技术分享. 本文不会关注 ...

  5. 快速检索并引用你在CSDN上所有的博文笔记

    简 介: 利用CSDN提供的博文的列表,编写了一个快速检索自己博文,并自动插入索引连接的程序.这样就可以大大提高博文写作的效率,将之前记录学习.工作的内容更好的进行连接.最后,感谢CSDN技术人员的大 ...

  6. 快速检索2021年EI会议论文的方法

    1. EI检索条件设置 1.1选择数据库 在SELECT DATABASE的下拉菜单中选择Compendex,系统默认数据库为Compendex, 其他数据库为: INSPEC(科学文摘).Paten ...

  7. python批量检索文献pubmed_PubMed快速检索文献,学学这些技巧!

    原标题:PubMed快速检索文献,学学这些技巧! PubMed为科研路上必不可少的数据库,今天传授PubMed高手常用的7个技巧,让你快速找到自己想要的文献. 1,获取全文技巧 Pubmed提供的文献 ...

  8. 【每日一题】快速检索

    [每日一题]快速检索 1.笔试-选择题   [笔试-选择题] 2.有关字符串   [每日一题]删除公共字符   [每日一题]字符串筛选-去除所有相同的字符   [每日一题]倒置字符串-巧用cin输入流 ...

  9. 虹软人脸识别SDK接入Milvus实现海量人脸快速检索

    虹软人脸识别SDK接入Milvus实现海量人脸快速检索 背景 虹软SDK及Milvus简介 开发环境 虹软人脸识别SDK使用简介 Milvus环境搭建 快速检索实现 人脸识别流程简介 快速检索 虹软S ...

最新文章

  1. 一种新颖的流程控制方式
  2. 《Adobe Flash Professional CC经典教程》——1.15 复习
  3. android异步编程,AsyncTask简单的异步编程android 中的实现
  4. Jenkins 使用slave管理进行持续集成测试说明
  5. So, from the AI ​​application level, what problems does
  6. Django开发利器——django-debug-toolbar
  7. 基于Javaweb实现进销存管理系统
  8. AO采集用友oracle,用SQL快速生成用友GRP-U8的AO财务账套的方法2017
  9. html如何解决412问题,网站412怎么解决?
  10. NVIDIA显卡驱动报错
  11. 交换刀片和计算刀片的区别_有关编写自定义刀片指令的所有信息
  12. Linux内核抢占机制(preempt)
  13. java 算出下一个工作日_如何计算JAVA中两个不同日期之间的工作日(不包括周末)?...
  14. vue中 根据权限 动态的设置路由
  15. 【报告分享】2021年Q2中国新经济创业投资数据分析报告-IT桔子(附下载)
  16. 1到50中7的倍数的数值之和
  17. 原生jq下载文件的方式
  18. Linux下ffmpeg添加 x265
  19. XMOS软件开发入门(1) - 开发板硬件资源介绍
  20. 使用 smartmontools 查看硬盘的健康状态

热门文章

  1. 【单目标优化求解】基于matlab黑猩猩算法求解单目标问题【含Matlab源码 1413期】
  2. PTA实验题:6-2 Tree类的构造函数和成员函数 (10 分)
  3. [ffmpeg]ffmpeg yasm not found, use --disable-yasm for a crippled build
  4. 理论篇-地图学与GIS制图的基础理论(二)
  5. 哥特巴赫猜想 尾递归 湘潭孕妇之后的自我检讨
  6. [NC1105B]下雨天
  7. 【设计模式】依赖倒转原则(Dependence Inversion Principle)
  8. /home/wxl/jdk1.8.0_91/jre/lib/i386/libawt_xawt.so: libXext.so.6: cannot open shared object file: No
  9. ubuntu18.04下YOLOV4测试和训练自己的数据集
  10. 测试apk-异常管控Gps攻击者开发