< 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
第四步:在() 前,为添加:
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 ios 唱歌/K歌评分代码sdk
- android开发笔记之电池低电处理
- Android进阶——Android跨进程通讯机制之Binder
- Android国际版WPS,助你解锁SVIP权益
- 8.0 Android O Keyguard解锁流程
- Android属性系统简介【转】
- 提升你的Android开发技能:从AR/VR沉浸到UI设计和故障排除
- Android studio:Connection failed 网络配置错误
- 琴琪拉吉他 团队Android小作品Chinchilla Guitar发布
- 基于Android的电子书阅读器(Android studio毕业设计