Android仿微信联系人列表字母侧滑控件

  

仿微信联系人列表字母侧滑控件,侧滑控件参考了以下博客:

  

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;   保护ListmData;      公共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列表){   init(上下文列表);   }/* *   *转换分组数据为列表,并且更新键值的索引   * @param地图   * @return   */公共ListconvertMapToList (Map比;地图){   ListmData=https://www.yisu.com/zixun/new ArrayList <> ();   mKeyIndex.clear ();   (地图。条目 K,列表条目:map.entrySet ()) {   mData.add (entry.getKey ());   mKeyIndex.put (entry.getKey (), mData.size () - 1);   (V V: entry.getValue ()) {   mData.add (v);   }   }   返回mData;   }      公共空间刷新(Map 地图){   super.refresh (convertMapToList(地图));   }      @Override   公共空间刷新列表<对象>数据){   super.refresh(数据);   mKeyIndex.clear ();   }/* *   *得到键值的索引值   * @param k   * @return   */公共int getKeyIndex K (K) {   整数Integer=mKeyIndex.get (k);   如果(integer==null) {   返回getKeyIndexFromList (k);   }   返回整数;   }      公共int getKeyIndexFromList K (K) {   for (int i=0;我

Android仿微信联系人列表字母侧滑控件

Copyright © 2020-2023 feiqueyun.cn. All Rights Reserved. 肥雀云_南京肥雀信息技术有限公司版权所有 南京肥雀信息技术有限公司 苏ICP备16063723号-5