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

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

当然实际 App 开发过程我应该会使用 AppBarLayout 布局配合 Toolbar 控件吧。 如果在设计视图中查看这个布局,我们能看到布局所展示的工具栏处于展开的状态: ?...在这里,我们需要调整 ImageView 的 imageAlpha 值。当然,你也可以使用自定义视图上的自定义属性来实现,就如同 ObjectAnimator 一样。...如果你对为什么这里选择缩放而非直接通过一个 CustomAttribute 改变 textSize 来实现表示怀疑的话,那么你要知道,在这里的理由就是因为相比简单直接地文本上应用一个形变,通过改变文本大小和重新渲染会非常耗计算资源...我们所做的另一件事情则是改变边距大小( margins ),以及如何让 TextView 文本的位置相对于 ImageView 图片的位置而固定。...折叠状态下它会垂直居中,而在展开状态下它会对齐底部,因此 TextView 会更多的相对于 ImageView 的大小尺寸来进行相关设定。

1.9K31

Constraint Layout 2.0 用法详解

图片 : 使用 Layer 对多个视图同时进行变换操作 图层 (layer) 布局期间会调整大小,其大小会根据其引用的所有视图进行调整。...您可以对视图的移动、滚动、缩放、旋转、淡入淡出等一系列动画行为进行自定义,甚至可以定义各个动画本身的自定义属性。它还可以处理手势操作所产生的物理移动效果,以及控制动画的速度。...使用 MotionLayout构建的动画是可追溯且可逆的,这意味着您可以随意切换到动画过程任意一个点,甚至可以倒着执行动画效果。...这样一来,协调多个视图的动画,就可以做到对各个细节进行精细操控。...尤其是以下两种情况下,MotionLayout 会比其它动画构建工具更胜一筹: 可追溯的动画 - 由其它输入驱动的动画,例如工具栏滚动时会出现的折叠效果 状态转换 - 由状态更改驱动的动画,例如用户进入某一界面后

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

探索 MotionLayout 动画世界

disableScroll :禁止滚动。 supportScrollUp :支持向上滚动。 moveWhenScrollAtTop :定义是否滚动到顶部允许拖拽。...KeyPosition 指定动画序列特定时刻的位置(中间状态的位置),用于调整默认的运动路径。 motionTarget :定义应用此关键帧的运动目标,可以是一个视图或者一个运动场景。...:onCross="toggle" /> 效果图: 开关由关闭状态变为开启状态 ConstraintSet(类似于Constrainlayout) 用来设置视图开始或者结束各个控件的位置和大小等状态...Constraint元素我们可以设置控件的大小并使用ConstraintLayout的属性来设置控件位置。...需要在开始和结束的两个Constraint为控件设置大小,即使控件大小没有改变也需要在两边都设置好大小。 然后设置开始和结束状态,动画执行时间。

9010

ConstraintLayout2.0一篇写不完之嵌套滚动怎么滚

ConstraintLayout1.x阶段,它主要提供的能力是对静态布局的支撑,那么到2.x之后,MotionLayout的拓展,让它对动态布局的支持有了进一步的优化,1.x阶段不能实现的嵌套滚动布局布局方式...,就需要自定义behavior来实现,这样一来,嵌套滚动布局就成了一个比较复杂的布局方式了,而MotionLayout的出现,就可以完美的解决这样一个布局难题。...ConstraintLayout2.x,有两种方式来实现嵌套滚动布局。...image-20210223105619990 AppBarLayout,我们通过MotionLayout控制动画效果。...addOnOffsetChangedListener(this) } } ❝这两种方式没有本质上的不同,但是对于MotionEditor来说,如果使用自定义MotionLayout非根布局下创建约束的时候会有一些问题

1.1K30

Android Studio 的 Motion Editor 用法详解

我们在编辑器中集成了关键帧编辑功能,让您可以轻松对动画进行调整。您可以点击 Selection 面板右上角的图标创建一个新的关键帧,然后会打开一个对话框,该对话框可以为关键帧设置各种属性。... Selection 面板创建关键帧 Attribute 面板 MotionLayout 创建动画需要编辑众多视图参数,因此我们 Motion Editor 引入了同 Layout Editor... Attribute 面板预览 Constraint 可视化效果 当您想对某个视图属性上添加动画效果,而该属性却不属于 ConstraintLayout 或者 MotionLayout API (...比如背景色) ,可以 Attribute 面板创建自定义属性。...Preview 面板 Preview 面板的加入使得处理动画效果,能够实现快速编辑并立即获取反馈,当您对动画进行细微调整之后,不用再去重新编译和部署,也能直接预览最终的动画效果。

2.2K10

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

这也很好的解释了我们所看到的 MotionLayout 对动画行为的实现。 利用关键帧特性我们甚至可以做到修改相关的行为动画,使得这些行为动画时间整个过渡动画中往后延迟。...为了实现这个目标,我们首先需要在展开状态 ConstraintSet 的定义删除自定义属性 imageAlpha 字段: <ConstraintSet android:id="@+id/expanded...最终标题<em>文本</em>会走在工具栏折叠动画之前,接着<em>在</em>折叠完全结束的时候直接回落到正确的位置上: ?...但是<em>在</em>目前来说,添加 tools:showPaths="true" 这段代码能够让 MotionLayout 计算并显示这三个被过渡动画所影响的视图控件的轨迹路线:标题文本控件(顶部,中心左侧),工具栏的海滩小排屋图片...你只需要记得最终发布版本要关闭这个功能——我建议定义一个布尔值资源,布局中使用,然后你就可以发布版本总能设置它为 false 就可以了。 好吧,这次就到这里。

1.6K30

用最少的代码却实现了最牛逼的滚动动画!

我们需要知道ScrollTrigger是基于GSAP实现的插件,ScrollTrigger是处理滚动事件的,而真正处理动画是GSAP,二者组合使用才能实现滚动动画~插件特点将任何动画链接到特定元素,以便它仅在视图中显示该元素才执行该动画...当窗口调整大小时,自动重新计算位置。开发过程启用视觉标记,以准确查看开始/结束/触发点的位置。...滚动记录器处于活动状态,如将active类添加到触发元素:toggleClass: "active"使用 matchMedia() 标准媒体查询为各种屏幕尺寸创建不同的设置。...自定义滚动触发器容器,可以定义一个 div 而不一定是浏览器口。高度优化以实现最大性能。插件大约只有6.5kb大小。...start: "top top", // 当触发器的顶部碰到口的顶部 end: "+=500", // 滚动 500 px后结束 scrub: 1, // 触发器1

2.8K00

2022 年的 CSS 全览

容器查询 @container 之前,网页的元素只能响应整个口的大小。这对于大型布局非常有用,但对于外部容器不是整个口的小型布局,布局不可能进行相应调整。...,为了计算颜色并进行调整,需要将颜色通道单独放置到自定义属性。...但是当该条滑出口高度发生了变化,任何 vh 单位都会随着目标大小的变化而移动和调整大小。...根据访问口的大小,可以页面加载上节省更多资源。当用户与媒体滚动条交互,继续保存。这些图像上都有load="lazy"属性,再加上CSS完全隐藏元素,这意味着永远不会对图像发出网络请求。...对于我的测试,一个中等大小口上,最初加载了 40 个请求和 700kb 的资源。当用户滚动媒体选择,会加载更多请求和资源。

4.2K20

Mac电脑必备屏幕截图软件,Snagit

捕获整个桌面,区域,窗口或滚动屏幕。 4.只需点击几下即可修改获得一整套编辑工具。并自己创建图像。编辑屏幕截图或构建自定义图形。无需与设计师合作。...模糊信息 隐藏或屏蔽图像的***信息。隐藏您公开分享的屏幕截图中的帐号,地址或其他信息。 明智之举 自动使屏幕的对象捕获可移动。重新排列按钮,删除文本或编辑屏幕截图中的其他元素。...文字替换 Snagit识别屏幕截图中的文字以便快速编辑。更改屏幕截图中文本的字词,字体,颜色和大小,而无需重新设计整个图像。 魔棒工具 使用魔棒工具根据颜色选择图像上的区域。...整个屏幕截图中快速删除背景或替换对象(如文本或徽标)的颜色。 Snagit邮票 使用专为截图设计的贴纸,个性化您的图像。直接从Snagit获取最新的邮票,或在此处下载以前的邮票。...您的屏幕截图会自动保存到您的库。标记捕获以始终保持项目的有序性。 调整图像大小 将图像调整到正确的大小,直到像素。使用“调整大小”选项输入新尺寸以缩放图像的大小

1.8K40

最新iOS设计规范四|3大界面要素:视图(Views)

模板图像应集中约70px×70px的区域中。 使用简单的活动标题来描述你的任务。标题显示活动视图中的图标下方。短标题最好。当标题太长,iOS首先缩小文本,然后如果标题仍然太长直接将其截断。...五、图像视图(Image Views) 图像视图是透明或不透明背景上,显示的单个图像或动画图像序列。图像视图中,图像可以被拉伸、缩放、调整大小以适合或固定到特定位置。...请注意,系统可能会调整浮层的大小,以确保它适合屏幕。 确保自定义的浮层与系统提供的浮层类似。尽管可以自定义浮层,但是也应该避免创建看起来都不像是浮层的设计。当浮层接近系统浮层,往往效果最好。...如果你滚动图中显示页面控制元素,则需要关闭滚动图中滚动条以免为用户带来困扰。 不要在一个滚动图中放置另一个滚动视图。...同一刻只显示一个滚动视图。用户经常会在滚动使用非常大幅度的动作,如此便会非常难以避免同一屏幕对相邻的滚动视图进行交互操作。

8.4K31

提高效率 |ArcGIS Pro 中所有快捷键一网打尽

向上翻页键 向上移动一个屏幕大小 2D ,向前平移一个屏幕宽度。 3D ,照相机保持照相机角度和高度不变的同时会向前移动一个屏幕宽度。 向下翻页键 向下移动一个屏幕大小。...左键拖动 - 平移 单击左键 - 弹出 滚动滚轮 - 缩放 单击并拖动滚轮 - 倾斜和旋转( 3D ) 右键拖动 - 持续缩放 使用其他工具进行居中并放大或居中操作,请分别按下 C+Shift... 3D ,照相机保持照相机角度和高度不变的同时会向下移动一个屏幕宽度。Home向左移动一个屏幕大小 2D ,向左平移一个屏幕宽度。... 3D ,照相机保持照相机角度和高度不变的同时会向左移动一个屏幕宽度。End向右移动一个屏幕大小 2D ,向右平移一个屏幕宽度。...当照相机移动调整鼠标指向以设置您要行驶的方向。可以选择使用 W 和 S 键更改方向。 左箭头键和右箭头键 从视图中心向左或向右移动照相机。

68820

IntersectionObserver API 使用教程

网页开发,常常需要了解某个元素是否进入了"口"(viewport),即用户能不能看到它。 上图的绿色方块不断滚动,顶部会提示它的可见性。...传统的实现方法是,监听到scroll事件后,调用目标元素(绿色方块)的getBoundingClientRect()方法,得到它对应于口左上角的坐标,再判断是否口之内。...,即intersectionRect占boundingClientRect的比例,完全可见为1,完全不可见小于等于0 上图中,灰色的水平方框代表口,深红色的区域代表四个被观察的目标元素。...四、实例:惰性加载(lazy load) 有时,我们希望某些静态资源(比如图片),只有用户向下滚动,它们进入才加载,这样可以节省带宽,提高网页性能。这就叫做"惰性加载"。...后者定义根元素的margin,用来扩展或缩小rootBounds这个矩形的大小,从而影响intersectionRect交叉区域的大小

1.8K60

超级实用!,掌握这9个鲜为人知的CSS属性

浏览器使用自定义字体隐藏文本,直到字体加载完成后再显示文本。 block :通过这个值,浏览器减少了等待自定义字体加载隐藏文本的时间,使得备用字体能够更快地显示出来。...然而,浏览器会无限期地等待自定义字体,并在其可用时立即切换。 swap :这是最常用的值。它在自定义字体加载立即显示备用文本。一旦自定义字体准备就绪,它将替换备用字体。...fallback :使用这个值,当等待自定义字体,会有一个短暂的不可见文本。如果在一定时间内(大约100毫秒)自定义字体还没有准备好,将使用备用字体。...scroll-snap-align scroll-snap-align 属性控制滚动容器捕捉位置的对齐方式。它决定了滚动停止滚动容器与捕捉点的对齐方式。...它提供了一种简单的方法,确保元素保持特定的宽高比,无论其内容或口的大小如何。 设置元素的宽高比处理响应式设计或保持特定视觉比例非常有用。

30730

非样式布局

* 行高相关的现象和解决方案 * 行高的调整 * 底线 顶线,底线和顶线 之间 是文本占据的区域。 * 基线(base line),英文文字的对齐线。...空隙的大小 字体大小而定(如果字体大小是12px,那么 缝隙会是3px左右的) * 解决方法:将图片的vertial-align设置为bottom即可。...显示其余部分,滚动条 始终显示 auto:内容超出容器后,允许滚动 显示其余部分,滚动 才显示滚动条。...* 自定义字体的使用场景 利用网络字体,css定义,进行字体的引用。 1. 宣传/品牌/banner等固定文案:因为中文的字体体积非常大,动辄十几M。 2....图标字体:把图标做成文字,给他定义成特别的字体,需要使用的地方 引入该字体。 * base64的使用 把图片变成文本的一种方式,然后把base64字符串 内嵌到css 进行使用。

1.8K20

初探富文本之基于虚拟滚动的大型文档性能优化方案

此处我们先来设一下文档图片渲染的实现,通常在上传图片的时候,我们会记录图片的大小也就是宽高信息,实际渲染的时候会通过容器最大宽高以及object-fit: contain;来保证图片比例,当渲染即使图片未实际加载完成...,但是为了用户滚动尽量避免出现短暂白屏的现象,由此提前加载部分视图内容,通常这部分值可以取得口高度的一半大小;接下来是viewport部分,这部分是真实在口区域要渲染的内容;而在口区域下我们同样需要...所以我们需要在滚动容器上创建IntersectionObserver,此外根据前边聊的我们会对视口区域做一层buffer,用来提前加载口外的元素,这样可以避免用户滚动出现空白区域,这个buffer的大小通常选择当前口高度的一半...,很明显Resize的时候由于会导致容器宽度的变化,因此文本块的高度也会跟随发生变化,因此我们的口锁定还需要在此处进行调整。...调整滚动条的位置,我们不能使用smooth动画而是需要明确的设置其值,以防止我们的口锁定失效,并且避免多次调用时取值出现问题。

11910

View 上使用挂起函数 | 实战

当用户点击其中的某一集,该集的详细信息将以点击处展开的动画来展示 (0.2 倍速展示): 应用采用 InboxRecyclerView 库来处理图中的展开动画: fun onEpisodeItemClicked...)) } else { // 否则我们等待新的条目添加到适配器,然后重试 adapter.registerAdapterDataObserver(object :...MotionLayout.awaitTransitionComplete() 目前还没有 MotionLayout 的 ktx 扩展方法提供我们使用,并且 MotionLayout 暂时不支持添加多个监听... TV 节目的例子,实际上处理了几种不同的异步状态: // 确保指定的季份列表已经展开,目标剧集已经被加载 viewModel.expandSeason(nextEpisodeToWatch.seasonId...nextEpisodeToWatch.id) 这个方法使用了 RecyclerView 的 AdapterDataObserver 来实现监听适配器数据集的改变: /** * 等待给定的[itemId]添加到了数据集中,并返回该条目适配器的位置

1.4K30
领券