仿微信联系人列表字母侧滑控件,侧滑控件参考了以下博客:
Android实现ListView的a - z字母排序和过滤搜索功能
首先分析一下字母侧滑控件应该如何实现,根据侧滑控件的高度和字母的数量来平均计算每个字母应该占据的高度。
在视图的onDraw()方法下绘制每一个字母
保护空白> @Override 公共布尔dispatchTouchEvent (MotionEvent事件){ 最后一个int action=event.getAction (); 最后浮动y=event.getY();//点击y坐标 最后一个int lastPosition=mPosition;//记录上一次选中字母的位置 最后一个int位置=(int) (y/获得()* getData () .size());//点击y坐标所占总高度的比例* b数组的长度就等于点击b中的个数。 开关(行动){//当手指离开 案例MotionEvent.ACTION_UP://设置侧滑控件的背景色 setBackgroundColor (getBackgroundNormalColor ()); mPosition=1; 无效(); 如果(getOnTouchLetterListener () !=null) {//回调事件,告知当前手指已经离开当前区域 .onTouchOutside getOnTouchLetterListener () (); } 打破; 默认值://更改当字母为选中状态时控件的背景色 setBackgroundColor (getBackgroundPressedColor ());//如果选中字母的位置不等于上一次选中的位置 如果(lastPosition !=位置){ 如果(位置在=0,,位置& lt;.size getData () ()) { 如果(getOnTouchLetterListener () !=null) {//回调事件,返回当前选中的字母 getOnTouchLetterListener () .onTouchLetter (getData () . get(位置); } mPosition=位置; 无效(); } } 打破; } 返回true; } 公共接口> 公共抽象类SimpleAdapter扩展BaseAdapter { 保护环境mContext; 保护List mData; 公共SimpleAdapter () {} 公共SimpleAdapter(上下文语境,List 数据){ init(上下文数据); } 公共空间init(上下文语境,List 数据){ 这一点。mContext=上下文; 这一点。mData=https://www.yisu.com/zixun/data; } @Override 公共int getCount () { 返回mData.size (); } @Override 公共T getItem (int位置){ 如果(checkPositionIsOutOfRange(位置)){ 返回null; } 返回mData.get(位置); } @Override 公共长getItemId (int位置){ 返回的位置; } @Override 公共抽象视图getView (int位置,视图convertView ViewGroup父); 公共空间刷新列表 数据){ 如果(数据==null) { this.mData.clear (); 其他}{ 这一点。mData=数据; } notifyDataSetChanged (); } 公共布尔checkPositionIsOutOfRange (int位置){ 如果位置(0 <=& & getData () { 返回mData; } } >之前 这个SimpleAdapter实现了数据基于列表的最基本方法的实现,使得每次继承BaseAdapter不用再实现一些基本的方法,接下来再看一下用于更好实现分组的适配器的进一步封装:
公共抽象类SortAdapter{ 最后公共静态int VIEW_TYPE_GROUP=0; 最后公共静态int VIEW_TYPE_CHILD=1; 私人HashMap ,mKeyIndex=new HashMap<的在(); 公共SortAdapter(上下文语境,Map 比;地图){ init(上下文,convertMapToList(地图)); } 公共SortAdapter(上下文语境,List