调研了一下微博和豆瓣等大体量的APP,发现内容详情页的评论吸顶效果非常常见。

以截图自豆瓣的效果为例,当上划至内容部分消失时,滑动中的回复条会置顶,并保持在位置不动。

笔者通过实践,记录下目前发现的最easy 的写法,只改变布局,不需要代码动态修改。使用方式如下:

View A: 当滑动时,需要滑动上去不见的部分

View B:当滑动到顶端时,需要保持可见的部分

View C:一般来说是一个RecyclerView

<androidx.coordinatorlayout.widget.CoordinatorLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><com.google.android.material.appbar.AppBarLayoutandroid:layout_width="match_parent"android:layout_height="140dp"><View android:id="@+id/view_A"android:layout_width="match_parent"android:layout_height="100dp"android:gravity="center"android:background="@color/teal_700"app:layout_scrollFlags="scroll|enterAlways"/><Viewandroid:id="@+id/view_B"android:id="@+id/hot_title"android:layout_width="match_parent"android:layout_height="40dp"tools:ignore="MissingConstraints" /></com.google.android.material.appbar.AppBarLayout><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/view_C"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/white"app:layout_behavior="@string/appbar_scrolling_view_behavior"/></androidx.coordinatorlayout.widget.CoordinatorLayout>

主要是通过CoordinateLayout(协调者布局)和AppBarLayout两者相结合。通过app:layout_behavior的设置达到效果。

简单介绍一下CoordinateLayout吧。

/*** CoordinatorLayout is a super-powered {@link android.widget.FrameLayout FrameLayout}.** <p>CoordinatorLayout is intended for two primary use cases:</p>* <ol>*     <li>As a top-level application decor or chrome layout</li>*     <li>As a container for a specific interaction with one or more child views</li>* </ol>** <p>By specifying {@link Behavior Behaviors} for child views of a* CoordinatorLayout you can provide many different interactions within a single parent and those* views can also interact with one another. View classes can specify a default behavior when* used as a child of a CoordinatorLayout using the* {@link DefaultBehavior} annotation.</p>

官方给出的解释是加强版的FrameLayout,所以基本使用跟FrameLayout一样。要不就是layout中最顶层的父View,也就是上图包括View A,View B,View C的情况,要不就是当成一个layout容器在父视图中。我们这次使用的的是第一种情况,作为父布局的情况。

CoordinatorLayout主要多增加的属性就是app:layout_behavior了。不设置时就是默认不添加behavior的情况,像View B这样。在例子中,是包含在CoordinatorLayout中的View C设置了behavior属性,使用的是官方默认的,当然如果你需要的话,也可以自定义behavior来使用。

具体的引用值如下

<string name="appbar_scrolling_view_behavior" translatable="false">com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior</string>
<string name="bottom_sheet_behavior" translatable="false">com.google.android.material.bottomsheet.BottomSheetBehavior</string>
<string name="fab_transformation_scrim_behavior" translatable="false">com.google.android.material.transformation.FabTransformationScrimBehavior</string>
<string name="fab_transformation_sheet_behavior" translatable="false">com.google.android.material.transformation.FabTransformationSheetBehavior</string>
<string name="hide_bottom_view_on_scroll_behavior" translatable="false">com.google.android.material.behavior.HideBottomViewOnScrollBehavior</string>

根据name也可以看出来使用场景了,这里不赘述了。这边使用的是和AppBarLayout配套的app:layout_behavior="@string/appbar_scrolling_view_behavior"。啥意思呢,就是viewC这个childView,要把自己放在appBar底下滑动。

再看滑着滑着就不见的View A,放置在AppBarLayout这个容器里面,特别设置了一个属性:app:layout_scrollFlags="scroll|enterAlways" 这个scrollFlags属性呢,有5个值可以填。

scroll :跟着滑动,在屏幕里面滑进滑出。这个属性是主要属性,底下的属性就是附加效果。只有scroll这个属性时,View C滑到顶,第一个item可见,View A才滑动显示出来。

enterAlways:View C快滑到顶的时候,View A先滑动显示出来,最后View C才划到第一个Item可见。

enterAlwaysCollapsed:往下滑时,View A先逐渐滑动,到最小值时,View C再滑动

snap:上下滑手指离开时,View A要么全显示,要么不显示,没中间过渡态

exitUntilCollapsed:往上滑时,View A滑到最小状态,然后View C再滑动

Android - 吸顶效果 布局篇相关推荐

  1. 【使用篇】WebView 实现嵌套滑动,丝滑般实现吸顶效果,完美兼容 X5 webview

    本文首发我的公众号徐公,收录于 Github·AndroidGuide,这里有 Android 进阶成长知识体系, 希望我们能够一起学习进步,关注公众号徐公,5 年中大厂程序员,一起建立核心竞争力 背 ...

  2. Android RecyclerView 吸顶效果(一)

    实现效果: 实现方案介绍 recyclerView实现吸顶效果有2种方案: 方案1: 通过ItemDecoration 并重写对应的getItemOffsets().onDraw().onDrawOv ...

  3. android滑动自动吸顶效果,安卓当下最流行的吸顶效果的实现(上)

    原标题:安卓当下最流行的吸顶效果的实现(上) 开始逐渐领略到ItemDecoration的美~ 今天让我 使用 ItemDecoration 来完成 可推动的悬浮导航栏的效果,最终实现的效果如下图: ...

  4. 微信小程序第六篇:元素吸顶效果实现

    系列文章传送门: 微信小程序第一篇:自定义组件详解 微信小程序第二篇:七种主流通信方法详解 微信小程序第三篇:获取页面节点信息 微信小程序第四篇:生成图片并保存到手机相册 微信小程序第五篇:页面弹出效 ...

  5. 最贴近京东首页体验的嵌套滑动吸顶效果

    吸顶效果是各家 App 或多或少都会用的一个交互,这种交互也常见于 PC.H5,可以说是一种通用性很强的前端交互体验,相比较来说京东首页的嵌套滑动吸顶效果是各个类似效果中体验比较好的一个,因为在嵌套布 ...

  6. 仿微博发现页吸顶效果

    整个首页布局采用 CoordinatorLayout 布局,实现正常的吸顶效果.然后监听 AppBarLayout 的展开与折叠.我直接上代码吧. 首页外部布局: <androidx.coord ...

  7. 自定义tab吸顶效果一

    PS:问题:什么是吸顶,吸顶有什么作用,吸顶怎么使用? 在很多app商城中,介绍软件的时候就会使用吸顶效果, 吸顶有很多作用,一个最简单粗暴的作用就是,让用户知道此刻在浏览哪个模块,并可以选择另外的模 ...

  8. Unity实现ScrollView并包含吸顶效果

    1 前言 想在Unity做一个类似android/ios的界面,可上下滑动,可吸顶,该咋做呢? 本文就来做个demo. 先上效果: Scroll View是一个2D UI控件,新建好了,会自动包含子节 ...

  9. 30秒实现Vue吸顶效果

    酱酱,好久不见鸭! 前言:吸顶效果图: 1.滚动前: image.png 2.滚动中: image.png 3.滚动超过后: image.png 直观效果可参pc端微博左侧的信息栏 第一步:html ...

最新文章

  1. jieba中文分词源码分析(四)
  2. 【Android WebSocket】Android 端 WebSocket 基本用法 ( 下载 Java-WebSocket源码 | 导入 Java-WebSocket-1.5.2 工程作为依赖 )
  3. “搬砖”机器人,每小时800块!
  4. P4299 首都(LCT、重心)
  5. CVPR 2022 | 旷视研究院入选论文亮点解读
  6. 支付宝相关信息会被泄露出去吗?
  7. 第 13 章 StringTable
  8. Jenkins连接git时出现“Failed to connect to repository : Command ... HEAD“ returned status code 128:”的问题解决
  9. Centos7部署开源聊天软件rocket.chat
  10. webservice的wsdl文件怎么生成
  11. 高斯光束的简单matlab仿真
  12. Unity3D 2D贴图 与 帧动画
  13. 电源管理芯片之 Regulator 用法 与具体使用实例
  14. 计算机漫游模式,深入理解操作系统之一 —— 计算机系统漫游
  15. 阿里云服务器的windows和linux系统怎么选
  16. 第39级台阶(dp)
  17. CAD版本转换,手机该如何转换操作呢?
  18. 英文论文写作相关实用网站与工具整理
  19. CAN FD、CANDTU、CAN记录仪实战之示波器捕捉波形及对照CAN FD帧定义解析CAN FD帧
  20. php 访问 HTTP 网址

热门文章

  1. STM32开发手册-IAP流程
  2. 关于QT4的一些学习杂记
  3. GitHub忘记用户名和密码如何找回
  4. 怪物猎人GU-武器派生整理之双刀篇
  5. 服务监控可以监控哪些
  6. 案例驱动式Python学习笔记【第三篇】居民身份证信息提取
  7. 硬核! 逛了4年Github ,一口气把我收藏的 Java 开源项目分享给你!
  8. Deepin + Veket 双Linux U盘随身系统
  9. 从原理到策略算法再到架构产品看推荐系统 | 附Spark实践案例
  10. Python3中_和__的用途和区别