拖放 是最基本的手势操作,用户可以点击并按住图片、文本或其他数据元素,然后将其拖动至另一个应用 (或者同一个应用的其他位置) 并松手,即可将数据放置到新的位置上。...手势通常在触摸屏上表现为长按,在使用鼠标时则为点击并拖动。...△ 简单的拖放示例 虽然 Android 很早以前便一直支持拖放操作 (DragEvent 在 Android 3.0 即 API 级别为 11 中引入),但事实证明实现对处理手势、事件、权限和回调的全面支持并不容易...对用户而言,将数据从一个应用拖动到另一个应用是很自然的体验,因此用户在 分屏或窗口模式 下使用应用可以更有效地进行多任务处理。...△ 从一个应用中拖动到另一个应用 DropHelper 和 DragStartHelper 结合使用,可以更轻松地处理手势支持、回调、样式和像素完美对齐。
在一个OverLay当中可以包含多个地图标记。我们需要实现Overlay类中的draw()方法才能在地图上绘制信息。 Ø GeoPoint 这是一个通过经纬度表示位置的对象。...示例10.1 在地图当中通过添加标记Marker的方式标注指定位置。 在使用google地图时,可以看到地图上常用图钉或小气球来标记位置。...在地图当中使用标记的步骤为: (1) 在MapView之上创建一个单独的图层(一个MapView上可以添加很多图层); (2) 创建标记对象; (3) 将标记显示在指定图层的指定位置; (4) 处理点击标记的事件...示例10.3 开发一个非常简单的GPS导航系统,要求该应用程序每隔30秒获取一次GPS定位数据,当程序得到 GPS定位信息之后,就把Google Map定位到该位置,这样就可以在地图上实时地跟踪设备的移动位置...进行Google Map开发必须获取 Map API Key 二、上机练习 结合GPS与Google Map技术,模拟开发一个简单的GPS导航应用。当设备移动时,要求在地图上绘制出移动的轨迹(选做)。
" android:value="${MAPS_API_KEY}" /> 最后我们在app模块下的android{}闭包中增加一个secrets属性,如果该属性不存在,代码如下所示: secrets...三、添加地图 首先我们在工程中创建一个map包,里面新建一个GoogleMapActivity。...③ 地图点击事件 关于地图的事件我们主要讲述点击事件,比如我们点击哪里就移动地图到哪里,这是很常用的一个功能,实现起来也很简单,在configMap()函数中添加如下代码: // 地图点击事件...④ 管理Marker 首先我们声明一个变量 // 标记 private var marker: Marker?...① 坐标转地址 首先我们来写坐标转地址,地址的结果我们通过Address来接收,这是一个列表,首先我们声明变量: // 地理编码器 private var geocoder: Geocoder
概念:轮播如何MotionLayout工作 假设我们要构建一个简单的水平轮播视图,并放大一个居中视图: 我们的基本布局包含几个视图,代表了我们的轮播项目: 通过MotionLayout创建具有三个状态的...例如,假设我们有5个视图:处于开始状态的A,B,C,D,E。 start时,B,C,D可见,而A和E在屏幕外。...我们要设置previous的状态,以使A,B,C,D的位置现在位于B,C,D,E所在的位置,并且视图从左向右移动。...这种无限轮播的错觉的方式,实际上是将实际视图移回它们的位置,然后使用新的匹配内容将其重新初始化。...Carousel Helper还需要设置几个属性: app:carousel_firstView:表示轮播的第一个元素的视图,在我们的示例中为C,即首先展示默认居中的视图 app:carousel_previousState
w: 前移一个单词,光标停在下一个单词开头; W: 移动下一个单词开头,但忽略一些标点; e: 前移一个单词,光标停在下一个单词末尾; E: 移动到下一个单词末尾,如果词尾有标点,则移动到标点; b:...m{A-Z}: 标记光标所在位置,全局标记。标记之后,退出Vim, 重新启动,标记仍然有效。 `{a-z}: 移动到标记位置。 ‘{a-z}: 移动到标记行的行首。...`{0-9}:回到上[2-10]次关闭vim时最后离开的位置。 : 移动到上次编辑的位置。''也可以,不过精确到列,而'‘精确到行 。如果想跳转到更老的位置,可以按C-o,跳转到更新的位置用C-i。...I: 在当前行第一个非空字符前插入; gI: 在当前行第一列插入; a: 在光标后插入; A: 在当前行最后插入; o: 在下面新建一行插入; O: 在上面新建一行插入; :r filename在当前位置插入另一个文件的内容...:[n]r filename在第n行插入另一个文件的内容。 :r !date 在光标处插入当前日期与时间。同理,:r !
上篇我贴上了我使用的vim配置及插件配置,有这些东西只能是一个脚本堆积,无从谈高效的代码阅读开发。 下面我们就来写经常使用的命令,就从配置F系列快捷键开始吧。...在浏览模式下输入shift + : 输入 b 5 就会跳到Android.mk这个文件,也可以直接使用Tab按键切换(这个窗口在打开多个文件后出现) 4....代码行快速移动 浏览模式下 j(下移一行)k(上移一行)h (左移一列)l (右移一列) shift + h (移到行首) shift + l (移到行尾) gg (移动到文件开始) shift+g...(移动到文件最后) shift + f (下翻一屏) shift + b (上翻一屏) 先输入数字 然后 shift + g(直接跳转到该行) w (后移一个字符串) b (前移一个字符串) 5....查找替换 shift + * 当前字符 串(字符串高亮) n (下一个出现位置 ) shift + n (上一个出现位置) %s/string1/string2/g 命令模式下将该文中的所有string1
光标的移动 4.1 基本移动 以下移动都是在normal模式下: h或退格: 左移一个字符; l或空格: 右移一个字符; j: 下移一行; k: 上移一行; gj: 移动到一段内的下一行; gk: 移动到一段内的上一行...w: 前移一个单词,光标停在下一个单词开头; W: 移动下一个单词开头,但忽略一些标点; e: 前移一个单词,光标停在下一个单词末尾; E: 移动到下一个单词末尾,如果词尾有标点,则移动到标点; b:...m{A-Z}: 标记光标所在位置,全局标记。标记之后,退出Vim, 重新启动,标记仍然有效。 `{a-z}: 移动到标记位置。 '{a-z}: 移动到标记行的行首。...I: 在当前行第一个非空字符前插入; gI: 在当前行第一列插入; a: 在光标后插入; A: 在当前行最后插入; o: 在下面新建一行插入; O: 在上面新建一行插入; :r filename在当前位置插入另一个文件的内容...快速修改窗口在make程序时非常有用,当make之后: :cl -- 在快速修改窗口中列出错误。 :cn -- 定位到下一个错误。 :cp -- 定位到上一个错误。 :cr -- 定位到第一个错误。
Delete) 删除所选的项目,将其移至回收站 Ctrl + R(或 F5) 刷新活动窗口 Ctrl + Y 恢复操作 Ctrl + 向右键 将光标移动到下一个字词的起始处 Ctrl + 向左键 将光标移动到上一个字词的起始处...+ 箭头键 当组或磁贴的焦点放在“开始”菜单上时,可将其朝指定方向移动 Ctrl + Shift + 箭头键 当磁贴的焦点放在“开始”菜单上时,将其移到另一个磁贴即可创建一个文件夹 Ctrl + 箭头键...Alt + 所选择的键 开始在块模式下选择 箭头键 按指定方向移动光标 Page up 将光标向上移动一个页面 Page down 将光标向下移动一个页面 Ctrl + Home(标记模式) 将光标移动到缓冲区起始处...Ctrl + End(标记模式) 将光标移动到缓冲区结尾处 Ctrl + 向上键 在输出历史记录中上移一行 Ctrl + 向下键 在输出历史记录中下移一行 Ctrl + Home(历史记录导航) 如果命令行为空...对话框键盘快捷方式 按键 操作 F4 显示活动列表中的项目 Ctrl + Tab 在选项卡中向前移动 Ctrl + Shift + Tab 在选项卡中向后移动 Ctrl + 数字(数字 1–9) 移动到第
2021-01-16 07:37:33 在阿里云的云市场页面上有一个效果,就是api导航栏当滚动条滚动到其所在位置时,自动吸顶,当滚动到下方所在导航栏指定的介绍时,自动高亮其导航栏。...实现方法 正常情况下我们点击自动定位到其所在位置一般用id锚点的方式,但是这种方式有一个缺陷就是无法实现滚动条缓动效果,而且带url上还会通过hash的方式显示出ID,另外也无法实现滚动到内容所在位置自动高亮导航栏...那么需要我们自己手动来实现以下,具体实现思路就是增加滚动条监听事件,当滚动到导航栏指定内容区域时,给其导航栏增加高亮样式,点击导航栏时,计算好滚动条的滚动距离,让其滚动过去即可。...,并且给内容部分增加ref,便于后续获取其内容,导航栏也增加何时吸顶的标识以及导航栏高亮的标识,另外增加了一个class为zhanfIx的地址,因为当导航栏吸顶时,此处会因为空出位置,下面内容上移,而产生不和谐的效果...下面我们来看一下导航栏吸顶和滑动到指定位置导航栏高亮的逻辑。
一个很好的例子是 Google Duo 团队 对其应用进行的优化,从而使该应用在平板电脑和可折叠设备上均能运行良好。...这是一个简单的媒体播放器案例,它会自动调节尺寸以避免让折叠处出现在画面中间,并且调整播放控制组件的位置,从屏幕完全展开时嵌入画面中,变为当屏幕部分折叠时显示为单独的面板。...MotionLayout 结合了父类的灵活性,同时又具备在视图从一种姿态过渡到另一种时展示流畅动画的能力。...第三个视图是一个 ReactiveGuide。它被放置在另外两个视图中间,并且以 Guideline 的形式作为另外两个视图的划分。...当设备完全展开时,整个屏幕都会被用于显示主 PlayerView。 最后的问题: 当设备折叠时,您应该将 ReactiveGuide 移动到哪里?
我们展示了基于经验反馈和现代硬件以及实现挑战所指导的设计选择的简单近似,最终产生了一个基于 MRA 的自注意力方法,其在大多数感兴趣的标准上具有出色的性能。...T5 不使用标记类型 ID,因此返回一个零列表。...返回 List[int] 一个整数列表,范围为[0, 1]:1 表示特殊标记,0 表示序列标记。 从没有添加特殊标记的标记列表中检索序列 ID。...通过连接和添加特殊标记从一个序列或一个序列对构建用于序列分类任务的模型输入。...T5 不使用标记类型 id,因此返回一个零的列表。 查看 T5TokenizerFast 获取所有细节。
知识背景 名称:ConstraintLayout 出身:Android Studio 2.2新增功能 成就:2016年Google I/O大会黑马奖;可视化Android界面编写领军角色 关键词...较为复杂的约束 调整控件外边距及尺寸 细心的读者们或许会发现,在调整控件位置比例的时候,当进度条滑动至100时,控件未能完全贴上布局的右边界,这是因为控件存在外边距。 ?...删除单个约束 除了上面这种删除方法,也可以在属性面板中,将鼠标移动到下图红色框框标记的位置,待出现叉叉图标,点击可删除该约束。 ?...如下图,创建一个垂直方向的参考线,将其切换至百分比模式,拖动到50%的位置,再将两个控件在左右两侧分别与Guidelines添加约束,然后两个控件的底边相互添加约束即可实现合并居中的效果。...拖动Guidelines Autoconnect 或许因为我们是第一次接触ConstraintLayout,所以感觉添加约束的操作很有趣,但是在项目中,当控件数量比较多时,每个控件的每条边都要一个一个添加约束
它们以命令的名称开头(我们可以将其看作一个动词),然后有一系列可选的修饰符或标记,这些修饰符或标记用于特定的函数和具有命令要影响的某种对象。...要将当前位置移动到另一个目录,我们使用cd命令。要转至/etc/目录,请使用以下命令:: cd /etc/ 您还可以使用各种快捷方式来导航文件系统树。...虽然这通常是首选的行为,但有时候目录列表太长,或者默认情况下没有正确排序。shell允许我们将输出从一个命令定向到另一个命令,直到输出对我们有用为止。...屏幕终端在创建时被分配一个数字,您可以使用C-a #访问一个特定的数字。访问常用屏幕键绑定列表发送C-a ? 然而,关于屏幕会话最好的部分是,它们在单个控制台会话之外是持久的。...C-f 将光标向前移动一个字符 C-b 将光标移回一个字符 M-f 将光标向前移动一个单词 M-b 将光标移回一个单词 更多信息 怎么样,学会了吗?
为了帮助开发团队创造最好的用户体验,我们拆解出了这一份清单,其中包括了我们所能想到的一个基准版PWA该有的所有点,以及如何进一步做出一个体验更完美的模范版PWA的重要细节。...从详细信息页面返回,保留上一个列表页面上的滚动位置 确认方法:在应用程序中查找列表视图。向下滚动点击一个项目进入详细页面。在详细页面上滚动。...按返回,确保列表视图滚动到与细节链接/按钮被点击之前相同的位置。 改善方法:当用户按“返回”时,恢复列表中的滚动位置。有些路由库可以帮你完成这个功能。...下面是天狗网的页面,在列表中点击详情页后,再后退返回列表时,列表页仍然能滚到上次进入的位置 点击时,输入框不会被屏幕键盘遮蔽 确认方法:找到一个包含文本输入的页面。...确保网站上有一些地方允许您管理通知权限或禁用它们。 改善方法: 创建一个UI,允许用户管理他们的通知偏好。
在您的应用中使用 Paging 3 假设我们正在实现一个展示所有狗狗的应用。狗狗的数据从 GoodDoggos API 获得,该 API 支持基于索引的分页。...开发文档|使用 Room DAO 访问数据; 如果您从一个 多层级数据源 加载数据,就像带有本地数据库缓存的网络数据源那样。...由于我们希望数据在配置产生变化后仍然存在,缓存应当尽可能靠近 UI 层,但又不能在 UI 层中,那么最好的位置便是在 ViewModel 中,并使用 viewModelScope: val doggosPagingFlow...当您修改 PagingData 并插入分隔符时,您会用到 insertSeparators 转换: pager.flow.map { pagingData: PagingData -> pagingData.map...当配置发生改变时,这些缓存就会被复用。 使用 RemoteMediator 进行高级分页操作 当您从一个 多层级数据源 加载数据时,应当实现一个 RemoteMediator。
默认情况下,Flutter会根据具体平台分别使用不同的ScrollPhysics对象,应用不同的显示效果,如当滑动到边界时,继续拖动的话,在iOS上会出现弹性效果,而在Android上会出现微光效果。...默认情况下,Flutter会根据具体平台分别使用不同的ScrollPhysics对象,应用不同的显示效果,如当滑动到边界时,继续拖动的话,在iOS上会出现弹性效果,而在Android上会出现微光效果。...指定 itemExtent 的值比让子元素决定自身长度在绘制时更高效,特别是在滚动位置频繁变化的状态下,因为设置 itemExtent 可以让滚动系统提前知道列表的长度。...默认情况下,Flutter会根据具体平台分别使用不同的ScrollPhysics对象,应用不同的显示效果,如当滑动到边界时,继续拖动的话,在iOS上会出现弹性效果,而在Android上会出现微光效果。...(在懒加载时,如果设置了包裹那么在此列表项滑出屏幕外时不会被GC。
当app等待网络响应时,展示一个加载指示。 修复 如果使用的是单页应用,直接把用户过渡到下个页面,同时展示一个加载占位图,并且使用加载时已经可用的内容,像是标题或者缩略图。...例如: 一个菜谱应用应该有Rich Card的菜谱类型标记 一个新闻应用应该有Rich Card的新闻文章类型标记,也可以加上AMP支持 一个电商引用应有Rich Card的产品类型标记 社交metadata...在图片加载前,你可以展示一个灰色的方块或者模糊/小的版本(如果可能的话)来作为占位符。 从详情页回退到之前的列表页面时,列表页保持滚动距离 测试 在应用中找一个列表区域。向下滚动。触碰项目进入详情页。...在详情页上下滚动。点击返回,确保列表区域滚动到详情链接/按钮触碰前的位置。 修复 用户点击返回时,恢复列表的滚动位置。一些路由库会有帮你做这个的特性。...触碰时,输入框不会被屏幕键盘遮挡 测试 找到一个有文本输入框的页面。把文本输入框滚动到刚好在屏幕底部。点击输入框,验证键盘出现时其没有被遮住。
w: 前移一个单词,光标停在下一个单词开头; W: 移动下一个单词开头,但忽略一些标点; e: 前移一个单词,光标停在下一个单词末尾; E: 移动到下一个单词末尾,如果词尾有标点,则移动到标点; b:...n%: 到文件n%的位置。 zz: 将当前行移动到屏幕中央。 zt: 将当前行移动到屏幕顶端。 zb: 将当前行移动到屏幕底端。 4.3 标记 使用标记可以快速移动。...m{A-Z}: 标记光标所在位置,全局标记。标记之后,退出Vim, 重新启动,标记仍然有效。 `{a-z}: 移动到标记位置。 ‘{a-z}: 移动到标记行的行首。...I: 在当前行第一个非空字符前插入; gI: 在当前行第一列插入; a: 在光标后插入; A: 在当前行最后插入; o: 在下面新建一行插入; O: 在上面新建一行插入; :r filename在当前位置插入另一个文件的内容...快速修改窗口在make程序时非常有用,当make之后: :cl – 在快速修改窗口中列出错误。 :cn – 定位到下一个错误。 :cp – 定位到上一个错误。 :cr – 定位到第一个错误。
前两篇我们分别介绍了什么是散列表,如何动手实现一个散列表,并且用“分离链接法”解决了散列表中散列值冲突的问题。这一篇我们介绍另一个方案:线性探查法。...我们在上面写过一个注意事项,在索引递增时必须确保新索引在散列表中有对应的数据,否则影响 key 的查询。...这就要求在删除元素之后,如果在这个位置的后面有另一个元素 小于等于 被删元素的 hash 值,我们得把这个元素移动到被删除的位置,避免出现空位。 为什么?...首先,因为 key 对应的位置已经被删除了,所以在我们在 {2} 处将 pos 加一,用于获取被删位置的下一个位置的索引。 接下来判断 index 处是否有元素。...经过三篇的反复学习,相信你对散列表已经娴熟于心了。 下一篇,我们介绍一个运算基础 —— 递归。 本文来源公众号:程序员成功。
vim可以支持从a到z的26个位置标记,一般来说我们用不到这么多,即使你能全部用到,可能早就忘了前面标记的在哪个位置了。这种方式有一个最大的问题就是在标记之后从显示上无法知道我们的标记位于何处。...我们可以先这样理解,motion 允许我们在一个文件中进行移动。而跳转则是不同文件间的移动。就像在浏览器中从一个页面打开另一个页面。...在nvim-config 中随意打开一个文件,然后使用edit 打开另一个,接着就可以使用 和 在两个文件中切换了 我们再来联想一下浏览器中的历史记录,我们发现有时候访问同一个页面的不同位置可能会产生多条历史记录...我们可以通过g; 和 g, 来访问下一个和上一个记录。你可以拿;和, 来类比记忆。这两个操作符是配合f来使用的。; 移动到下一个匹配位置,, 移动到下一个匹配位置。...比如说我们新建一个settings.h 在同样的目录中,再次执行之前的操作,发现它还是能够正确的打开settings.lua vim 中有一个suffixesadd 变量,它保存的当前缓冲区中执行gf操作时
领取专属 10元无门槛券
手把手带您无忧上云