前言 之前用简书的时候一直是在web端,后来下载了客户端,看到了搜索的那个动画,就尝试的去写了,没写之前感觉挺容易的,写了之后,就感觉里面还是有些要注意的东西的。话不多说,直接上图。...滚动监听: mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override...(); //当position=0时,对标题栏执行透明度变化 if (position == 0) {...//计算滚动的距离占header高度的比例 double delta = Math.floor(((float) getScollYDistance(recyclerView...) % mHeaderHeight)); //给标题栏设置透明度 mLlTitle.getBackground().setAlpha
前言 之前用简书的时候一直是在web端,后来下载了客户端,看到了搜索的那个动画,就尝试的去写了,没写之前感觉挺容易的,写了之后,就感觉里面还是有些要注意的东西的。话不多说,直接上图。 ?...(); //搜索框距离屏幕边缘的margin int rightMargin = Px2DpUtil.dp2px(this, 17); //屏幕宽度减去左右margin后的搜索框宽度最大值...对标题栏执行透明度变化 if (position == 0) { //计算滚动的距离占header高度的比例 double delta = Math.floor...(((float) getScollYDistance(recyclerView) % mHeaderHeight)); //给标题栏设置透明度 mLlTitle.getBackground...().setAlpha((int) delta); } //当position=1时,搜索框最大 if (position == 1) {
"> 当 CoordinatorLayout 发现 RecyclerView 中声明了这一属性,它就会搜索包含在其下的其他 view 看有没有与这个 behavior 关联的任何相关 view。...CollapsingToolbarLayout 的时候,应该如此文档所述,将状态栏设置成半透明(API 19)或者透明(API 21)的。...例如,在一个下拉刷新的例子中,这个属性应该放在包含了 RecyclerView 的 SwipeRefreshLayout 中而不是第二层以下的后代中。...CoordinatorLayout 的工作方式是通过搜索所有在 XML 中静态地使用 app:layout_behavior 标签或者以编程的方式在 View 类中使用 @DefaultBehavior...此 behavior 用来在滚动事件发生时触发 AppBarLayout 上的改变。
那么Android5.0也同时给出了相应的解决方案,即推出MaterialDesign库,通过该库中的AppBarLayout控件,对Toolbar加以包装,从而实现顶部工具栏的动态变化效果。...下面是AppBarLayout结合RecyclerView实现的工具栏向上滚动效果截图: ?...的滚动效果,但并非所有可滚动的控件都会触发Toolbar滚动,事实上只有Android5.0之后新增的少数滚动控件才具备该特技。...RecyclerView是其中一个特工,它可用来替代ListView和GridView;替代ScrollView的则另有其人,它便是嵌套滚动视图NestedScrollView,在Android5.0之后的...所以,搜遍Android的SDK源码,总共也只有三个控件符合这个条件,它们是RecyclerView、NestedScrollView,以及SwipeRefreshLayout,在布局文件中使用的名称如下所示
简评:Android Support Library 26 中终于实现了一个等待已久的功能: RecyclerView 的快速滚动 。...现在 RecyclerView 终于原生支持了快速滚动,现在就让我们来看一下怎么实现: 首先,在 build.gradle 中添加依赖: dependencies { .......现在,来看一看具体怎么实现 RecyclerView 的快速滚动: <?xml version="1.0" encoding="utf-8"?...类型,决定是否启用快速滚动,当设置为 true 时需要设置下面的四个属性。...fastScrollVerticalThumbDrawable: 竖直滚动块。 fastScrollVerticalTrackDrawable: 竖直滚动栏背景。
电商app的首页,一般是可滑动列表,当用户上下滑动时,列表中的item可能会多次出现在屏幕上。某个item从出现到消失的过程大于某一时间(比如1s),就认为是一次曝光。...有横(竖)滑的模块 的子view:若模块可见,就上报 当前子列表中 的可见子模块 ;同时处理子列表滑动时的item可见性;模块不可见,那当前子列表的可见view上报不可见。...三、曝光逻辑代码说明 预备知识,view可见性的判断,https://www.jianshu.com/p/30b0ae304518 1、对recyclerView的滚动监听 滚动监听的目的:滑动中item...是可能多次曝光的,在列表 静止、手指拖动、快速滑动时都要 监听item的可见性,然后把可见或不可见回调,然后根据position具体上报item信息。...如果item内部 是 可滑动的recyclerView,那么就item可见时 子列表也做滚定监听就可以了,即内部的recyclerView也是用setRecyclerItemExposeListener
本例中,TabLayout在界面滚动时,随着Toolbar的逐渐隐藏,将占据Toolbar的位置, 达到节省屏幕空间,界面动画效果的目的。...enterAlwaysCollapsed: 当你的视图已经设置minHeight属性又使用此标志时,你的视图只能以最小高度进入,只有当滚动视图到达顶部时才扩大到完整高度。...exitUntilCollapsed: 当视图会在滚动时,它一直滚动到设置的minHeight时完全隐藏。..., 并且下面的这个控件必须是可滚动的。...当设置了layout_behavior的控件滑动时,就会触发设置了layout_scrollFlags的控件发生状态的改变。
,它可以控制包含在CollapsingToolbarLayout中的控件(如:ImageView、Toolbar)在响应layout_behavior事件时作出相应的scrollFlags滚动事件(移除屏幕或固定在屏幕顶端...CollapsingToolbarLayout可以通过app:contentScrim设置折叠时工具栏布局的颜色,通过app:statusBarScrim设置折叠时状态栏的颜色。...相匹配,用来通知AppBarLayout 这个特殊的view何时发生了滚动事件,这个behavior需要设置在触发事件(滚动)的view之上。..."> 当CoordinatorLayout发现RecyclerView中定义了这个属性,它会搜索自己所包含的其他view,看看是否有view与这个behavior相关联。...AppBarLayout里面定义的view只要设置了app:layout_scrollFlags属性,就可以在RecyclerView滚动事件发生的时候被触发: <android.support.design.widget.AppBarLayout
保持一致 设置可见性:setVisibility(View.VISIBLE) 这些方法有的可以,有的不行,或许跟版本有关,或许Android本身不是很支持用setImageUri从网上获取图片吧!...三、 DrawerLayout must be measured with MeasureSpec.EXACTLY 这个问题出现的原因多是: 多个可滑动的控件在同一个布局界面中嵌套使用,导致滑动冲突...,因而Android错误地计算了内层的可滑动控件的尺寸。...这个问题的原因是: 在RecyclerView中添加其他控件,如这样: <android.support.v7.widget.RecyclerView xmlns:android="http:/...,我们的item在设置大小上就没有了参照物,所以内容的现实效果都是WRAP_CONTENT。
不过,Android在实现展开效果的时候,并非直接让Toolbar展开或收缩,而是另外提供了CollapsingToolbarLayout,通过该布局包裹Toolbar,从而控制标题栏的展开和收缩行为。...上述属性在代码中的设置方法如下所示: setContentScrim/setContentScrimColor/setContentScrimResource : 设置布局内部未展开时的背景颜色。...setCollapsedTitleTextAppearance : 设置未展开时的标题文字字体。 setCollapsedTitleTextColor : 设置未展开时的标题文字颜色。...只是许多App把这两者的背景设为一样的,所以看起来像是统一的标题栏在收缩和展开。...下面是标题栏在折叠时显示渐变图片的效果图: ?
更多关于使用 SlidingPaneLayout 的信息,请参阅: 创建双窗格布局。 资源限定符的局限 搜索应用栏也在不同屏幕内容下显示不同内容。...当您在搜索时,可以选择不同的标签来过滤需要显示的搜索结果,我们也会把当前生效的过滤标签显示在以下两个位置之一: 窄模式时位于搜索文本框下方,宽模式时位于搜索文本框的后面。...△ 平板横屏时的搜索应用栏 (窄模式) △ 平板竖屏时的搜索应用栏 (宽模式) 此前,我们通过在搜索 Fragment 的视图层次中的应用栏部分使用 标签,并提供两种不同版本的布局来实现此功能...将 RecyclerView 自身的内边距也设置为相同的值,会使得元素同 RecyclerView 边界的距离与元素间的空隙保持相同的大小,在元素周围形成统一的留白。...为了让元素能够一直滚动显示到 RecyclerView 的边缘,需要设置 android:clipToPadding="false"。 屏幕越多样越好 Android 一直是个多样化的硬件生态系统。
scroll - 想滚动就必须设置这个。...enterAlwaysCollapsed - 当你的View已经设置minHeight属性又使用此标志时,你的View只能以最小高度进入,只有当滚动视图到达顶部时才扩大到完整高度。...滚动时无响应bug。...app:layout_anchor时,在最新的23.2.0包会出现问题,解决办法是用android:layout_gravity="bottom|end" 替换。...题外话3 23.2.0中在CoordinatorLayout中使用Toolbar ,toolbar无法与顶部对齐,即顶部存在垂直间距。
那么来学习在Android 5.X新增的一个列表组件,那就是RecyclerView的使用。 ?...在开发RecyclerView时充分考虑了扩展性,因此用它可以创建想到的任何种类的的布局。但在使用上也稍微有些不便,比如使用步骤更加复杂,特别是一些控制点击、长压事件需要自己完成。...GridLayoutManager:在网格中展示条目,相当于之前学习的GridView。 StaggeredGridLayoutManager: 在错落的网格中展示条目,比如常见的瀑布流。...在弹出的窗口中输入recyclerview,然后点击右侧的搜索按钮,即可检索到最新的recyclerview依赖库,最后点击OK按钮即可添加。 ?...需要注意的是,在网格布局中也可以设置列表的Orientation属性,来实现横向和纵向的网格布局。
相信大家对于RecyclerView 都已经不再陌生,我们都知道RecyclerView等可滑动控件默认的是会有滚动条以及滑动到边缘时的阴影(光晕)效果的,那么怎样去掉这两个默认属性呢,在这里简单的记录一下...1、通过xml文件设置 android:scrollbars=""有三个属性 none:去掉滚动条 horizontal:设置水平的滚动条 vertical:设置垂直的滚动条 2、...(boolean verticalScrollBarEnabled); 设置为true时有相应的滚动条,为false时无相应的滚动条 滚动到边缘的光晕效果 1、通过xml文件设置...android:overScrollMode=""同样有三个属性 never:去掉光晕效果 always:设置总是出现光晕效果 ifContentScrolls:设置此模式,如果recycleview...同时去掉滚动条和默认的光晕效果的完整xml代码为: <android.support.v7.widget.RecyclerView android:overScrollMode="never"
在RecyclerView或者任意支持嵌套滚动的view比如NestedScrollView上添加app:layout_behavior。...相匹配,用来通知AppBarLayout 这个特殊的view何时发生了滚动事件,这个behavior需要设置在触发事件(滚动)的view之上。..."> 当CoordinatorLayout发现RecyclerView中定义了这个属性,它会搜索自己所包含的其他view,看看是否有view与这个behavior相关联。...AppBarLayout里面定义的view只要设置了app:layout_scrollFlags属性,就可以在RecyclerView滚动事件发生的时候被触发: .support.design.widget.AppBarLayout...CoordinatorLayout的工作原理是搜索定义了CoordinatorLayout Behavior 的子view,不管是通过在xml中使用app:layout_behavior标签还是通过在代码中对
RecyclerView的回收原理 (1)如果是RecyclerView不滚动情况下缓存(比如删除item)、重新布局时。...(2)如果是RecyclerView滚动情况下缓存(比如滑动列表),在滑动时填充布局。 先移除滑出屏幕的item,第一级缓存mCachedViews优先缓存这些ViewHolder。...详细使用方法可参考XUI中的DiffUtil局部刷新 和 XUI中的SortedList自动数据排序刷新 中的代码。 2.合理设置RecyclerViewPool的大小。...当程序走到onBindViewHolder方法时,数据应当是准备完备的,禁止在onBindViewHolder方法里面进行数据获取的操作。 3.有大量图片时,滚动时停止加载图片,停止后再去加载图片。...我是xuexiangjys,一枚热爱学习,爱好编程,勤于思考,致力于Android架构研究以及开源项目经验分享的技术up主。获取更多资讯,欢迎微信搜索公众号:【我的Android开源之旅】
比如上述例子中使用的LazyColumn,它就是用于在垂直方向上滚动的可复用列表。而LazyRow则是用于在水平方向上滚动的可复用列表。...因此最好的设计方案就是,当用户向下滚动列表时,我们就认为用户不再需要和Fab按钮交互,此时将按钮进行隐藏。 下面具体看一下如何在Compose中实现这种效果。...由于SubVerticalScrollable()中的滚动列表高度是固定的,我们设置成了300dp,因此这种情况也是合法的,运行效果如下: 除了这两种情况以外的嵌套滚动都是不合法的,Compose也不会惯着我们...目前我们已经知道,可以在Lazy Layout中添加一个items函数来指定要滚动的数据源列表。...除此之外,还可以在Lazy Layout中添加item函数来指定单个数据项,最终它们都会形成一个整体可滚动的列表。
在Fragment中显示标题栏,并为该标题栏添加菜单。 Fragment嵌套Fragment。 一行代码解决RecyclerView等视图的滚动冲突。...子Fragment内包含带下拉刷新的RecyclerView,该RecyclerView滑动的时候,父Fragment里的沉浸式头部也要跟着收起或拉伸。...传统解决方案 传统解决方案主要需要解决这些问题: 1.头部图片与标题栏的伸缩协调; 2.标题栏与状态栏的沉浸式协调及版本适配; 3.滚动视图的事件冲突。...()); // 在Fragment中显示标题栏,并为该标题栏添加菜单。...// 为ToolBar设置MarginTop. android:layout_marginTop="@dimen/height_status_bar" //在 dimen.xml 文件中添加 <dimen
2.AppBarLayout 其次就是AppBarLayout,去除官方解释,简单来说就是它可以让你定制当某个可滚动View的滚动手势发生变化时,其内部的子View实现何种动作。...内部的子View通过在布局中加app:layout_scrollFlags设置执行的动作。...enterAlways:值设为enterAlways的View,当ScrollView往下滚动时,该View会直接往下滚动。而不用考虑ScrollView是否在滚动。...,View就暂时不去往下滚动,直到ScrollView滑动到顶部不再滑动时,View再继续往下滑动,直到滑到View的顶部结束。...2.通过setContentScrim(Drawable)来设置达到某一个状态之后的出现的效果3.通过setStatusBarScrim(Drawable)来设置达到某一个状态之后的状态栏出现的效果
为了让RecyclerView变得像原来的ViewPager,需要设置下SnapHelper: new PagerSnapHelper().attachToRecyclerView(mRecyclerView...); 熟悉RecyclerView的同学都知道,SnapHelper用于辅助RecyclerView在滚动结束时将Item对齐到某个位置。...使用 通过android:orientation来指定滚动方向 <androidx.viewpager2.widget.ViewPager2 android:id="@+id/viewpager2...="vertical" /> 在代码中设置一个普通的RecyclerView.adapter: ViewPager2 viewPager2=findViewById(R.id.viewpager2...小结 viewpager2利用recyclerview来实现viewpager的功能,无疑使使其可扩展性大大提升,代码也变得更优雅简洁,使用起来也更灵活。
领取专属 10元无门槛券
手把手带您无忧上云