Android 最流行的吸顶效果的实现及代码( 三 )

< childCount; i++) {View view = parent.getChildAt(i);int position = parent.getChildAdapterPosition(view);preGroupId = groupId;groupId = callback.getGroupId(position);if (groupId.equals("-1") || groupId.equals(preGroupId)) continue;String textLine = callback.getGroupFirstLine(position).toUpperCase();if (TextUtils.isEmpty(textLine)) continue;int viewBottom = view.getBottom();float textY = Math.max(topGap, view.getTop());//下一个和当前不一样移动当前if (position + 1 < itemCount) {String nextGroupId = callback.getGroupId(position + 1);//组内最后一个view进入了headerif (nextGroupId != groupId && viewBottom < textY) {textY = viewBottom;}}//textY - topGap决定了悬浮栏绘制的高度和位置c.drawRect(left, textY - topGap, right, textY, paint);//left+2*alignBottom 决定了文本往左偏移的多少(加-->向左移)//textY-alignBottom决定了文本往右偏移的多少(减-->向上移)c.drawText(textLine, left + 2 * alignBottom, textY - alignBottom, textPaint);}}/** * 判断是不是组中的第一个位置 * * @param pos * @return */private boolean isFirstInGroup(int pos) {if (pos == 0) {return true;} else {// 因为是根据 字符串内容的相同与否 来判断是不是同意组的,所以此处的标记id 要是String类型// 如果你只是做联系人列表,悬浮框里显示的只是一个字母,则标记id直接用 int 类型就行了String prevGroupId = callback.getGroupId(pos - 1);String groupId = callback.getGroupId(pos);//判断前一个字符串 与 当前字符串 是否相同if (prevGroupId.equals(groupId)) {return false;} else {return true;}}}//定义一个借口方便外界的调用interface DecorationCallback {String getGroupId(int position);String getGroupFirstLine(int position);}}
第三步:在向list集合中先把每一个item的 起“标记”作用的字符串都加进去
setPullAction(comingslist);private void setPullAction(List comingslist) {dataList = new ArrayList<>();for (int i = 0; i < comingslist.size(); i++) {NameBean nameBean = new NameBean();String name0 = comingslist.get(i).getComingTitle();nameBean.setName(name0);dataList.add(nameBean);}}
第四步:在() 前,为添加:
recyclerView.addItemDecoration(new SectionDecoration(dataList,mContext, new SectionDecoration.DecorationCallback() {//返回标记id (即每一项对应的标志性的字符串)@Overridepublic String getGroupId(int position) {if(dataList.get(position).getName()!=null) {return dataList.get(position).getName();}return "-1";}//获取同组中的第一个内容@Overridepublic String getGroupFirstLine(int position) {if(dataList.get(position).getName()!=null) {return dataList.get(position).getName();}return "";}}));
这样就完成了~
【Android 最流行的吸顶效果的实现及代码】再看一眼最终效果感受一下:

Android 最流行的吸顶效果的实现及代码

文章插图