效果图:

      

1.顶部会悬浮章的部分

2.第二章上滑会推挤第一章

3.第二章下拉会带出第一章

4.并不是所有时候都有悬浮部分(为什么这条标红,因为市面上几乎所有的悬浮都是必须存在且在顶部,害的我必须自己写)

如果你要的只是和IOS通讯录相似的效果,即总有一行悬浮在顶部,百度stickyItemDecoration即可,网上一抓一大把,这里随便参考一个http://blog.csdn.net/briblue/article/details/70211942 ,原理很简单,就是给recyclerview分组,每个item都带一个header头布局,同一组第一个才显示,其他位置不显示,自带动效

可惜啊,我这里屏幕顶部还有其他的布局,导致一开始不能悬浮

根据顶部可见position来显示和隐藏悬浮行,大家都会,我主要讲如果做第二章推挤第一章的动效:

结构图分析如下:

代码如下

private void setTopView() {
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView t, int dx, int dy) {
//标题栏底部的Y坐标
int[] titleLocation = new int[2];
rootLayout.getLocationOnScreen(titleLocation);
int titleY = titleLocation[1] + rootLayout.getMeasuredHeight();
//最顶部可见的位置
int position = layoutManager.findFirstVisibleItemPosition();
//第二个布局的顶部Y坐标
BaseViewHolder viewHolder = (BaseViewHolder) recyclerView.findViewHolderForAdapterPosition(position + 1);
View layout = viewHolder.getConvertView();
int[] location = new int[2];
layout.getLocationOnScreen(location);
int y = location[1];
//悬浮章的底部坐标
int topBottom = titleY + topChapterLayout.getMeasuredHeight();
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, topChapterLayout.getMeasuredHeight()); if (list.get(position) instanceof CourseDetail) {
CourseDetail courseDetail = (CourseDetail) list.get(position);
CourseDetail courseDetailAfter = (CourseDetail) list.get(position + 1); if (!TextUtils.isEmpty(courseDetail.getChapterTitle())) {
params.topMargin = 0;
topChapterLayout.setLayoutParams(params);
topChapterLayout.setVisibility(View.VISIBLE);
chapter.setText(courseDetail.getChapterTitle());
switch (courseDetail.getChapterStatus()) {
case 0:
noComplete.setVisibility(View.VISIBLE);
complete.setVisibility(View.GONE);
break;
case 1:
complete.setVisibility(View.VISIBLE);
noComplete.setVisibility(View.GONE);
break;
}
if (null == courseDetailAfter) {
return;
}
if (courseDetail.getChapterId() != courseDetailAfter.getChapterId()) {
if (y <= topBottom) {
int scrollY = y - topBottom;
params.topMargin = scrollY;
topChapterLayout.setLayoutParams(params);
}
}
}
} else {
topChapterLayout.setVisibility(View.INVISIBLE);
}
}
});
}

主要原理就是判断y和topBottom的大小,如果第二章已经开始遮盖悬浮的位置了,那悬浮位置就上移,形成推挤的动效

RecyclerView悬浮标题的更多相关文章

  1. Android上使用RecyclerView实现顶部悬浮标题效果的Sticky Title View

    目前很多的项目都在使用顶部悬浮标题的效果,很明显,这的确是一个比较人性化,用户体验效果比较好的UI交互效果,对于这个效果,有很多种实现方式,如果说要用RecyclerView来实现一个分类信息展示,并 ...

  2. Android 使用RecyclerView优雅实现悬浮标题通讯录

    项目地址:https://github.com/hgDendi/ContactsList 界面概览: ContactsListDemo ContactsListDemo2 概要 如图,主要简单划分为两 ...

  3. RecyclerView 悬浮/粘性头部效果3种方式

    但是以上两种方式onDrawOver()方法实现逻辑对初次查看该段代码要花时间理解.下面代码逻辑(原理一样,同样参考大神代码)相对清晰,易理解 public class StickyDecoratio ...

  4. HTML中div的悬浮标题

    <div title="我是鼠标悬停文字">我是一个DIV</div> <div class="diggao" title=&qu ...

  5. Android开源项目库汇总

    最近做了一个Android开源项目库汇总,里面集合了OpenDigg 上的优质的Android开源项目库,方便移动开发人员便捷的找到自己需要的项目工具等,感兴趣的可以到GitHub上给个star. 抽 ...

  6. GitHub上受欢迎的Android UI Library

    GitHub上受欢迎的Android UI Library 内容 抽屉菜单 ListView WebView SwitchButton 按钮 点赞按钮 进度条 TabLayout 图标 下拉刷新 Vi ...

  7. Android UI相关开源项目库汇总

    最近做了一个Android UI相关开源项目库汇总,里面集合了OpenDigg 上的优质的Android开源项目库,方便移动开发人员便捷的找到自己需要的项目工具等,感兴趣的可以到GitHub上给个st ...

  8. GitHub 上受欢迎的 Android UI Library 整理(一)

    抽屉菜单 https://github.com/mikepenz/MaterialDrawer ★7337 - 安卓抽屉效果实现方案https://github.com/Yalantis/Side-M ...

  9. 最新最全的 Android 开源项目合集

    原文链接:https://github.com/opendigg/awesome-github-android-ui 在 Github 上做了一个很新的 Android 开发相关开源项目汇总,涉及到 ...

随机推荐

  1. Android Studio 更新失败的解决办法

    编辑$ANDROID_STUDIO_HOME/bin/ 下的 studio.exe.vmoptions(如果系统用的Ubuntu,文件应该是studio.vmoptions或者如果是64位系统,应该是 ...

  2. 【CodeForces】578 C. Weakness and Poorness

    [题目]C. Weakness and Poorness [题意]给定含n个整数的序列ai,定义新序列为ai-x,要使新序列的最大子段和绝对值最小,求实数x.n<=2*10^5. [算法]二分| ...

  3. cms替换主页

    cms替换主页的步骤 1.先做好静态页面: 2.在D:\wamp\www\phpcms\install_package\phpcms\templates文件夹下建新的文件夹tianqiwangluo( ...

  4. oozie的简易安装

    1. 解压  tar -zxvf oozie-4.0.0-cdh5.3.6.tar.gz 2.配置hadoop的集群,添加一个代理用户(给oozie运行mapreduce的权限) 在hadoop的co ...

  5. 巧用margin/padding的百分比值实现高度自适应

    原文:https://segmentfault.com/a/1190000004231995 一个基础却又容易混淆的css知识点 本文依赖于一个基础却又容易混淆的css知识点:当margin/padd ...

  6. flex图片布局

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>f ...

  7. 快速幂取模_C++

    一.题目背景 已知底数a,指数b,取模值mo 求ans = ab % mo 二.朴素算法(已知可跳过) ans = 1,循环从 i 到 b ,每次将 ans = ans * a % mo 时间复杂度O ...

  8. MyBatis数据库字段和实体对象属性名不一致的解决方案

    数据库和对象的属性名不一致是很常见的问题,这个时候依从表字段到对象属性名的按名称匹配映射已经搞不定这个了,下面是几种解决方案. 1. 开启驼峰转换 如果数据库中的字段名与对象只是简单的不一致的话,比如 ...

  9. 二. Jmeter--参数化

    1. 新建一个txt文件,输入些数据, 一行有四个数据,用逗号分隔. 保存的时候Encoding选择Unicode 2.添加一个Thread Group, 然后添加一个CSV Data Set Con ...

  10. java正则: 忽略大小写匹配

    import java.util.regex.Matcher; import java.util.regex.Pattern; import com.sun.org.apache.xerces.int ...