在Android中,字母索引这一设计在很多App中都有体现。手机联系人、微信、支付宝等在联系人一栏都会有这种设计。这种设计的便捷之处就是可以快捷的查找联系人。所以,我们今天也来打造这么一个自定义View的效果。注意,这里仅仅是模仿UI效果,不会实现功能。

这里只是谈一下实现的思路,不再详细的说明各个流程。详细的流程请看上两篇自定义View的文章,那两篇我流程写的很详细。
由于现在只想要这个IndexBar显示的宽度为字母的宽度+padding。也就是在这里我们的布局width为wrap_content,而height为match_parent。所以,在绘制竖排竖排字母前,我们还是要测量一下View。
onMeasure()中:
|
|
这里很好理解,由于高度是match_parent,所以直接不用处理高度。这里只要处理宽度就可以了。通过计算得到View的宽,之后只需要使用setMeasuredDimension(width, height)就完成了整个View的测量。
接下来,就可以进行View的绘制了。
onDraw()中:
|
|
当然下面这样进行坐标的计算也是可以的,是利用getTextBounds():
|
|
绘制矩形框时,发现矩形框与字母颜色类似,做了如下处理:
|
|
setAlpha(127),允许传入0~255之间的一个值,0为全透明,255为不同明。这里传入127表示半透明。这样就解决了同是灰色显示不清的问题。
绘制完字母之后,就需要进行触摸手势的处理了,这里只需要重写onTouchEvent()方法:
|
|
为了在触摸同时屏幕中心显示当前字母,就需要将当前字母传递出去。所以,这里用了java中的接口回调将当前字母传给调用者。
|
|
最后,布局文件:
|
|
屏幕中心圆形文字,是一个TextView,背景是一个shape。
最后在Activity中处理:
|
|
这样字母索引就完成了。