首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【翻译】MotionLayout实现折叠工具栏(Part 1)

一、说明 没有严格按照中英对照进行的翻译,但是我尽量把意思翻译到位,能看原文的朋友可以直接欣赏原文啦。 ?...Nicolas Roard 哥们早已发布了一个关于 MotionLayout 的完美详情介绍,我强烈推荐大家去阅读一下,从中理解 MotionLayout 组件的基础架构。...举个例子,一个折叠工具栏应该根据用户的滚动进行展开和折叠,所以实际动画的运行应该时刻跟随用户的拖拽进行。这也是那些框架办不到的地方。 废话不多说,让我们看下我们所要尝试模拟做到的行为动作。...在这里我特意使用了最基本的 View 控件类型,用来说明视图本身并没有产生任何其他的行为动作。当然在实际 App 开发过程中我应该会使用 AppBarLayout 布局配合 Toolbar 控件吧。...别小看这里短短的 10 行 XML 代码,它背后可为我们做了大量的工作哦。这其中内部原理非常复杂,它由 RecyclerView 的滚动行为所驱动。

2K31

在 View 上使用挂起函数 | 实战

这个 ID 映射到了季份列表中的某一集; 该集的条目可能还没有被添加到 RecyclerView 中,需要用户展开该季份的列表,然后将其滑动展示到屏幕上,这样我们需要的视图才能被 RecyclerView...,并且可能无法正常运行,旨在说明回调会极大增加 UI 编程的复杂度。...MotionLayout.awaitTransitionComplete() 目前还没有 MotionLayout 的 ktx 扩展方法提供我们使用,并且 MotionLayout 暂时不支持添加多个监听...registerAdapterDataObserver(observer) } } RecyclerView.awaitScrollEnd() 需要特别注意等待滚动完成的方法:... RecyclerView.awaitScrollEnd() suspend fun RecyclerView.awaitScrollEnd() { // 平滑滚动被调用,只有在下一帧开始的时候

1.4K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    建站的灵魂拷问:我的网站做好了,为啥无法搜索到?

    随着互联网技术的不断发展,越来越多传统企业开始重视品牌的数字化升级,寻求关于网站搭建的方法与技巧。但是在建站的实践过程中总是会遇到不少难题,例如“我的网站做好了,为啥无法搜索到”?...腾讯云就此通过大数据分析,筛选出企业客户最关注的3个问题,为您一探究竟。 1、网站制作好了,为什么无法访问? 当制作好网站后,所有人都关心我的网站什么时候能访问? 小技巧来啦!...①绑定域名,将注册的域名同网站绑定上; ②网站备案,可在控制台---网站建设申请[备案授权码]通过授权码提交完成网站备案; ③网站发布,网站制作好后,完成网站发布; ④域名解析,将域名指向到网站对应的服务器地址...请记住,“网站能访问”和“通过关键词能搜索到”这完全是两回事。...90%以上的企业做网站都是为了让更多的客户通过关键词搜索到自己的网站,从而找到我们。那网站主应该如何进行网站优化提升网站竞争度,让更多人搜索到我们呢?主要可以分以下几方面来操作。

    1.3K30

    【翻译】MotionLayout实现折叠工具栏(Part 2)

    Nicolas Roard 哥们早已发布了一个关于 MotionLayout 的完美详情介绍,我强烈推荐大家去阅读一下,从中理解 MotionLayout 组件的基础架构。...现在我们看看 MotionLayout 的实现,我们会发现图片渐变在整个过渡动画中是统一稳定的。也就是说:随着工具栏折叠动画的开始,图片便立刻发生渐变,一直持续到工具栏完全到达折叠状态: ?...我们之前在 ImageView 控件上定义的关于 imageAlpha 属性的过渡动画,设定的是从展开位置的值 255 到折叠位置的值 0 之间进行,同时 MotionLayout 在动画过程中会进行插值运算...(顶部中心),以及列表 RecyclerView 控件(中心位置): ?...即使如此,我相信大多数人还是会认同 MotionLayout 不仅灵活、强大,而且还为设计用户交互控制的布局动画开辟了一个非常有趣的可能性哦。 ? 三、总结 本篇的源代码请移步这里。

    1.7K30

    太有意思了,教你实现实现王者荣耀团战!

    那叫一个精彩,队友都发出了666666的称赞,我酷酷的点了一下抱拳:多谢!嘿嘿。 赛后,手机上正在展示我的MVP动画,我不禁思考,这么精彩的团战我怎么能不记录下来?...刚好最近了解到MotionLayout库,就用它实现吧?。 动画效果 ? 2 功能详解 MotionLayout 是一种布局类型,可帮助您管理应用中的运动和微件动画。...好了,回到后裔这边,由于后羿的箭是从后羿位置到亚瑟位置,所以我们设定好后羿箭的两个端点状态,配置好后,MotionLayout就会自动帮我们生成从起始状态到结束状态的动画了,后羿箭从后羿位置飞到了亚瑟位置...但是,Motionlayout还是有缺点的,比如直接通过xml代码的情况下,无法设置动画的衔接,设定动画的先后顺序。 所以到底motionlayout应用场景是什么呢?...那么问题来了,既然有为什么还要出个MotionLayout呢? 前者(TransitionManager)无法设置关键帧,动画只有两个状态。

    1.2K10

    项目需求讨论- 自定义滚轮(第二波新实现)

    因为比如我们建立一千组一万组数据,我不需要考虑要重新滚回中间,问题1和2就解决了。问题3因为RecyclerView 的特性,也被解决了。是一个很理想的循环滚动的滚轮。...---- 滚动后调整距离让RecyclerView 滚到特定的position位置: 我简单介绍,就只分二种情况来谈下(正好滑到一个标准的距离,让Item正好完全显示这种情况我就去除了): 顶部的Item...这时候大家也知道,应该是让当前的屏幕内获取到的first Item 滚动出界面,所以大家一想就说获取第一个Item的Position值,然后调用RecyclerView.smoothScrollToPosition...但是结果是不会滚动,原来这个方法当我们的Position + 1已经出现在屏幕上了。不管是不是第一个,不管处于屏幕的哪个位置,这个RecyclerView就不会滚动。我忍不住又一句 WHF!!。...无非是二种情况(假设一个ItemHeight为100): 已经有80滚动在外面了。我就通过ScrollBy 再向上过给它滚动20到外面。 已经有20滚动在外面了。

    1.1K20

    RecyclerView滑动时卡顿怎么办?

    大家好,我近期刚完成了一个商城类的软件,首页就是用recyclerview的多布局实现的,近期的优化让我不得不去深入的了解一下recycleview这个控件。...我遇到的第一个问题就是滑动时候卡顿,无法忍受,于是就在网上找了很多文章,看了很多代码,在这里就给大家总结一下这两天我觉得对这个问题处理有效的解决方式。...) onViewAttachedToWindow(当Item进入这个页面的时候调用) onBindViewHolder(将数据绑定到布局上,以及一些逻辑的控制就写这啦) onViewDetachedFromWindow...3.优化图片加载 我在别的文章中看到并且用在了自己的软件中,图片加载的优化是最有效的办法,而且很多主流的app中新浪微博,qq,今日头条等也在使用,因为列表在滚动过程中,如果布局很复杂,样式也很多,那就需要考虑滚动的时候不做复杂布局及图片的加载...newState)中回调两个变量: recyclerView : 当前在滚动的RecyclerView newState : 当前滚动状态.

    3.4K20

    Android:让你明明白白的使用RecyclerView——SnapHelper详解

    简介 RecyclerView在24.2.0版本中新增了SnapHelper这个辅助类,用于辅助RecyclerView在滚动结束时将Item对齐到某个位置。...这两个子类使用方式也很简单,只需要创建对象之后调用attachToRecyclerView()附着到对应的RecyclerView对象上就可以了。...,提高流畅度,在滑动滚动的时候会有一个预加载的过程,提前将Item给layout出来了,这个知识点涉及到的内容很多,这里做个理解就可以了,不详细细展开了,以后有时间会专门讲下RecyclerView的相关原理机制...到RecyclerView中间位置的距离,可以支持水平方向滚动和竖直方向滚动两个方向的计算。...其实这两个问题如果你理解了我上面所讲的SnapHelper的原理,解决起来就很容易了。

    6.2K40

    Android 列表视频

    = index) { // 如果不release后面的start无法正常执行,只能release videoView.release();...滚动监听中调用这个方法,注意要判断一下newState !...,因为这个holder复用的前面的,前面的已经把图片去掉了,所以后面需要把图片加回来,也就是常说的RecyclerView中写了if,就得写else。...这是其中一个复用问题,所有的RecyclerView中都会有这个问题,但是这个视频组件还有别的复用问题: 在多个视频存在的时候,可能前面的视频开始播放了,然后滚到下面来,开始播放新的视频,这时候发现播放的是前面的视频...,断点调试url是正确设置的,然后看videoView.start()方法,这里应该是不同实现有不同的写法,我这里的写法是会判断一下这个视频的状态,如果是播放中就不会再执行start(),那为什么会在播放中呢

    93730

    手把手教你打造RecyclerView滚动特效

    Item动画分析 我们化整为零,将这个效果分解到一个item上来看其实是这样的: ?...列表滑动效果 这是我用简书的Markdown代码块语法实现的仿RecyclerView列表的效果,基于这个效果我想到将侧边栏的滑块和RecyclerView的Item结合起来,与动画的process变量相关联...得到了上一步滑动与process的关系,接下来我们来计算一下滑块底部到RecyclerView可见范围顶部的距离。...RecyclerView总高度(包含不可见部分)与RecyclerView可见部分的高度相差得到;而scrollY则随着RecyclerView的滚动变化,因此需要对RecyclerView进行滚动事件的监听...与RecyclerView的滚动建立了关系;至此,动画与RecyclerView的逻辑关系梳理完毕。

    2.7K10

    项目需求讨论-Vlayout来快速构建及扩展复杂界面

    我先说下我最刚开始想到的最传统的想法: 1.首先因为功能块多的时候,需要界面能够滚动,所以我想到最外面用的ScrollView,然后ScrollView中包含了一个竖向排布的LienarLayout。...维护很不方便 2.定制化功能差了很多,如果我下次想在《我的服务》和《我的功能》大功能分类中,再多加一个《我的售后》,又的去布局中查找相应的位置,然后去去添加新的布局代码,或者是我想删除模块功能了,我还得去布局中找出来...---- 有没有什么好的办法呢。 上面说到过。我们的界面有没有像淘宝的首界面,各种布句杂糅在一起,然后又可以上下滚动,没错,那我就模仿淘宝的首页一样写个不就行了么。...,到后面维护又会变的很麻烦,所以这样写相对简单,适合模块不多的情况。...而且中间多设置一步,就是先每个LayoutHelper设置一个Adapter,成为的Adapter>,然后把这些Adapter再统一放入到一个的Adapter>中,再把这个的Adapter>

    1.2K20

    ViewPager2实现内部Item的动态滚动

    我们这是一个视频播放页+详情页,考虑到简单快捷,就想到了一个 ViewPager2 就可以实现,简单又快捷,为自己点赞。一想到如此easy,瞬时笑出了猪叫。...然后写完后,相应的加载回调是不是得自己再手动定义一个接口去伪造。比如不可见,页面加载,总体相对来说并不是那么容易。 就在我以为又可以摸鱼一个ViewPager2就可以搞定之时。...产品:得加一个第一次使用时的提示啊,要不然用户都不知道页面可以下滑呢?效果我发你了,你看看: 下图为我实现好的简单样式,大意体会即可。...解决方法 既然如此,ViewPager2是基于RecyclerView,那么我去调用RecyclerView滚动不就行吗,思路如下: ViewPager2-> RecyclerView, RecyclerView...默认是私有的,可以通过反射或者 getChildAt(0) 获取 RecyclerView不支持 scrollTo() ,可以通过 LinearLayouManager 去滚动 LinearLayoutManager-scrollToPositionWithOffset

    1.7K20

    写给初学者的Jetpack Compose教程,Lazy Layout

    Lazy Layout大概就相当于View系统中的ListView和RecyclerView。 这样类比一下相信大家一下子就懂了。同时,也应该意识到这是多么重要的一个控件了吧。...用法对比 在开始学习Lazy Layout之前,我想先来对比一下Lazy Layout和RecyclerView的用法区别。...rememberLazyListState 我们在使用RecyclerView编写滚动列表的时候,除了实现最基础的滚动功能之外,通常还会让程序随着列表的滚动进行一些额外事件的响应。...嵌套滚动 嵌套滚动一直是我最不喜欢做的事情,但是架不住就是有很多朋友会问。 RecyclerView是支持嵌套滚动的,但我认为绝大部分的情况下大家应该都用不到它。...当然可能有些朋友会说,我用的就是Compose 1.5版本,Lazy Layout滚动的时候还是会感觉卡卡的。

    65210

    RecyclerView预加载!

    列表的内容是由服务器返回的分页数据,每次浏览到当前页的尾部,都会拉取下一页的数据。这中断用户的浏览,不免产生等待。产品希望让这个过程无感知。...监听列表滚动状态 第一个想到的方案是监听列表滚动状态,当列表快滚动到底部时执行预加载,RecyclerView.OnScrollListener提供了两个回调: public class RecyclerView...原因是RecyclerView并不保证每个表项出现时onScrolled()都会被调用,若滚动非常快,某个表项错过该回调是有可能发生的。...在正常滑动过程中,这个方案无法做到精准匹配预加载阈值,即无法实现只回调一次onPreload(),因为onScroll()是像素粒度的回调,而预加载要做的表项粒度的检测。...唯一需要担心的是,列表滚动到底部触发了一次预加载后,又往回滚动(阈值位表项滚出屏幕),假设预加载迟迟没有完成,此时再次滚动到底部,移出屏幕的阈值位表项需要重新执行`onBindViewHolder(),

    2.4K00

    恢复 RecyclerView 的滚动位置

    您可能在开发过程中遇到过这种情况,在 Activity/Fragment 被重新创建后,RecyclerView 丢失了它之前保有的滚动位置信息。...通常这种情况发生的原因是由于异步加载 Adapter 数据,且数据在 RecyclerView 需要进行布局的时候尚未加载完成,导致 RecyclerView 无法恢复到之前的滚动位置。...从  1.2.0-alpha02 版本开始,Jetpack RecyclerView 提供了一个新的 API,可以让 Adapter  在数据加载完成之前阻塞布局行为 ,从而避免丢失滚动位置信息。...接下来我们会介绍如何使用这个新的 API,以及它的工作原理。 恢复至原有滚动位置 有好几种方法可以用来恢复 RecyclerView 至正确的滚动位置,您可能已经在实际项目中用到了这些方法。...如果根据您的项目实际情况无法采用这种方法,那也可以使用其他的方法,只是要么比较复杂 (比如避免在 RecyclerView 中设置 Adapter,但这样又有可能导致像 header 等 item 的显示问题

    1.5K10

    嵌套滑动通用解决方案--NestedScrollingParent2

    答案是否定的,效果如下: ? 按分析的view结构直接实现 可见,在tabLayout是吸顶状态,无法继续滑动内层RecyclerView(抬起手指继续滑也不行)。(点击查看相关代码) 那么该咋办呢?...根据滑动冲突的相关知识,我们知道一定是外层RecyclerView拦截了触摸事件,内层RecyclerView无法获取事件,就无法滑动了。...NestedScrolling(嵌套滑动)机制,简单说来就是:产生嵌套滑动的子view,在滑动前,先询问 嵌套滑动对应的父view 是否优先处理 事件、以及消费多少事件,然后把消费后剩余的部分 继续给到...,大于想要滚动的距离,内层自行处理 }else { //内层已滚动的距离,小于想要滚动的距离,那么内层消费一部分,到顶后,剩的外层滑动...相当于一个事假序列分发了两次,避免了常规事件分发 父view拦截后子view无法处理的问题。 onNestedPreScroll中的具体处理,请看代码,有详细注释。

    3.8K31

    ConstraintLayout2.0一篇写不完之极坐标布局与动画

    相对于一般布局方式的笛卡尔坐标系,MotionLayout还拓展了ConstraintLayout中的相对中心布局方式,我们暂且称之为「极坐标布局」方式。...极坐标布局方式在某些场景下,比笛卡尔坐标系的建立更加方便,特别是涉及到一些圆周运动和相对中心点运动的场景。...这样一个复杂的极坐标动画效果,虽然借助ConstraintLayout可以很方便的实现定位布局,但是运动时,却无法继续保持极坐标的依赖关系,所以,这里需要使用MotionLayout来维持运动时的极坐标约束关系...❞ MotionLayout中新增的属性非常多,大家可以参考我的这些文章,从各个方面,逐个击破MotionLayout的各个难点。...向大家推荐下我的网站 https://xuyisheng.top/ 点击原文一键直达 专注 Android-Kotlin-Flutter 欢迎大家访问 往期推荐 群英传2.0 flutter与compose

    66550

    从0系统学Android--3.6 RecyclerView

    我的想法是这样的,虽然现在 ListView 已经被 RecyclerView 替代了,但是本系列作为入门系列,力求内容完整!...而且 ListView 的扩展性不好,只能实现数据的纵向滚动效果,如果想要实现横向滚动的话就做不到了。 为此 Android 提供了更为强大的控件--RecyclerView。...onBindViewHolder() 就是用于对 RecyclerView 的子项数据绑定到 ViewHolder 上面,这个方法会在每个子项被滚动到屏幕内的时候执行,通过这里的 position 参数得到当前子项的数据...然后创建了适配器,将数据传入到适配器中,调用 RecyclerView 的 setAdapter 来完成适配器设置,让 RecyclerView 和 数据产生联系。...3.6.2 实现横向滚动和瀑布流布局 Listview 的可扩展性不好,只能实现纵向滚动,如果想要横向滚动的话 ListView 就做不到了。下面用 RecyclerView 来实现横向滚动。

    85420
    领券