当前位置: 首页 > news >正文

曰本孕妇做爰网站/百度在西安的公司叫什么

曰本孕妇做爰网站,百度在西安的公司叫什么,沈阳比较有名的工装公司,wordpress 传值在 Launcher3 执行涉及其他应用窗口(即“远程窗口”)的动画时,例如“点击桌面图标启动应用”或“从应用上滑回到桌面”的过渡动画,SurfaceControl 扮演着至关重要的角色。它是实现这些跨进程、高性能、精确定制动画的核心技术。 …

在 Launcher3 执行涉及其他应用窗口(即“远程窗口”)的动画时,例如“点击桌面图标启动应用”或“从应用上滑回到桌面”的过渡动画,SurfaceControl 扮演着至关重要的角色。它是实现这些跨进程、高性能、精确定制动画的核心技术。

SurfaceControl在源码中的使用

Launcher3中有几处非常经典的使用SurfaceControl的地方。
在这里插入图片描述

在分屏应用进入到最近任务,或者从最近任务启动应用时,涉及到分屏应用中间的bar条,这个bar条是属于SystemUI进程的,在Launcher中显示就属于远程窗口,因此需要通过SurfaceControl来进行更新操作。
启动分屏应用时bar条由隐藏到最终显示的过程就是通过SurfaceControl控制bar条的透明度来实现的。
源码如下:

    public static ValueAnimator createSplitAuxiliarySurfacesAnimator(@Nullable RemoteAnimationTarget[] nonApps, boolean shown,@Nullable Consumer<ValueAnimator> animatorHandler) {if (nonApps == null || nonApps.length == 0) {return null;}List<SurfaceControl> auxiliarySurfaces = new ArrayList<>();for (RemoteAnimationTarget target : nonApps) {final SurfaceControl leash = target.leash;if (target.windowType == TYPE_DOCK_DIVIDER && leash != null && leash.isValid()) {auxiliarySurfaces.add(leash);}}if (auxiliarySurfaces.isEmpty()) {return null;}SurfaceControl.Transaction t = new SurfaceControl.Transaction();if (animatorHandler == null) {// Apply the visibility directly without fade animation.for (SurfaceControl leash : auxiliarySurfaces) {t.setVisibility(leash, shown);}t.apply();t.close();return null;}ValueAnimator dockFadeAnimator = ValueAnimator.ofFloat(0f, 1f);dockFadeAnimator.addUpdateListener(valueAnimator -> {float progress = valueAnimator.getAnimatedFraction();for (SurfaceControl leash : auxiliarySurfaces) {if (leash != null && leash.isValid()) {t.setAlpha(leash, shown ? progress : 1 - progress);}}t.apply();});dockFadeAnimator.addListener(new AnimatorListenerAdapter() {@Overridepublic void onAnimationStart(Animator animation) {if (shown) {for (SurfaceControl leash : auxiliarySurfaces) {t.setLayer(leash, Integer.MAX_VALUE);t.setAlpha(leash, 0);t.show(leash);}t.apply();}}@Overridepublic void onAnimationEnd(Animator animation) {if (!shown) {for (SurfaceControl leash : auxiliarySurfaces) {if (leash != null && leash.isValid()) {t.hide(leash);}}t.apply();}t.close();}});dockFadeAnimator.setDuration(SPLIT_DIVIDER_ANIM_DURATION);animatorHandler.accept(dockFadeAnimator);return dockFadeAnimator;}

下来来详解SurfaceControl在Launcher中的角色以及为什么要使用SurfaceControl

SurfaceControl 的角色:

  1. 窗口/图层的句柄: 在 Android 图形系统中,每个窗口或可视元素最终都对应一个或多个图层 (Layer),这些图层由系统的合成器 (SurfaceFlinger) 负责管理和混合。SurfaceControl 是一个轻量级的句柄 (Handle),它代表了 SurfaceFlinger 中的一个图层(Surface)。你可以把它想象成一个指向屏幕上某个“画板”的遥控器。
  2. 直接操作图层属性: 通过 SurfaceControl,一个有权限的进程(在远程动画场景下,通常是 Launcher 或 SystemUI)可以直接、高效地修改其代表的图层在 SurfaceFlinger 中的各种属性,而无需与创建这个图层的原始应用进程进行复杂的通信或等待其响应。这些属性包括:
    • 几何变换: 位置 (Position)、缩放 (Scale)、旋转 (Rotation) (通常通过设置变换矩阵 Matrix 实现)。
    • 视觉效果: 透明度 (Alpha)、层级 (Z-order)、裁剪区域 (Window Crop)、圆角半径 (Corner Radius)、阴影 (Shadow Radius)、模糊 (Blur) 等。
  3. 跨进程动画的桥梁: 在远程动画中,系统 (WindowManager) 会将参与动画的窗口(例如正在打开的应用窗口、正在关闭的 Launcher 窗口、壁纸窗口)的 SurfaceControl(通常是一个称为 “Leash” 的特殊控制层)打包在 RemoteAnimationTarget 对象中,传递给动画控制器(Launcher)。
  4. 动画执行者 (SurfaceControl.Transaction): Launcher 拿到这些 SurfaceControl 后,不会去修改对应应用的 View 属性,而是创建 SurfaceControl.Transaction 对象。在动画的每一帧:
    • Launcher 计算出每个目标窗口图层应该具有的视觉属性(比如,应用窗口从图标大小放大到全屏,透明度从 0 到 1,裁剪区域从无到有,圆角从大变小)。
    • 使用 Transaction 提供的方法(如 setMatrix(), setAlpha(), setWindowCrop(), setCornerRadius())为每个 SurfaceControl 设置这些目标属性。
    • 最后调用 transaction.apply() 原子性地将这一帧的所有属性变更提交给 SurfaceFlinger
    • SurfaceFlinger 在下一个 VSYNC 信号到来时,根据这些最新的属性来合成并显示屏幕内容,从而驱动了视觉上的动画效果。

为什么在远程动画中使用 SurfaceControl

使用 SurfaceControl 是实现现代 Android 流畅、复杂过渡动画的关键,原因如下:

  1. 高性能 (Performance): 直接在 SurfaceFlinger (系统合成器)层面操作图层属性非常高效,通常能利用硬件加速。这避免了在应用进程内部进行复杂的 View 布局、绘制或属性动画,这些操作可能更耗资源且容易引发卡顿 (Jank)。
  2. 精确同步 (Synchronization): 对于涉及多个应用窗口(跨进程)的过渡动画(如应用启动/关闭、分屏),需要精确地同步它们的动画。通过 SurfaceControl.Transaction,Launcher 可以原子性地更新所有相关图层的属性,确保它们在同一帧内发生变化,实现完美的视觉同步。如果依赖各个应用自己执行动画,几乎不可能做到如此精确的同步。
  3. 强大控制力 (Control): SurfaceControl API 提供了对图层视觉属性的底层、细粒度控制,使得 Launcher 可以实现非常复杂的动画效果,例如从图标到窗口的平滑变形、窗口内容的裁剪、圆角变化等,这些效果很难通过传统的 View 动画或窗口动画(ActivityOptions)实现得如此精细。
  4. 解耦 (Decoupling): 被动画的应用(例如正在启动的应用)不需要主动参与这个由 Launcher 控制的过渡动画。应用只需要正常地将自己的内容绘制到它的 Surface 上即可。Launcher 通过 SurfaceControl 在外部“指挥”SurfaceFlinger 如何变换和展示这个 Surface。这大大降低了应用和系统过渡动画之间的耦合度。
  5. 无缝体验 (Seamlessness): SurfaceControl 使得元素(如图标)看起来能够“无缝地”跨越进程边界变形成为另一个应用的窗口,提供了非常连贯和自然的视觉体验。

总结:

在 Launcher 对远程窗口执行动画的过程中,SurfaceControl 充当了底层图层(Surface)的直接控制器。Launcher 通过它,绕开了应用进程,直接与系统合成器 SurfaceFlinger 交互,以高性能、精确同步的方式驱动应用窗口的几何变换和视觉效果,从而实现了流畅、复杂且跨进程的过渡动画。这是现代 Android 系统动画(尤其是 Quickstep 手势动画)的核心技术基础。

http://www.whsansanxincailiao.cn/news/30335232.html

相关文章:

  • 嘉定公司网站设计/如何建立网站平台
  • 全部免费网站软件/微信营销平台系统
  • 做电影免费ppt模板下载网站/数字营销包括哪六种方式
  • 垂直类门户网站/北京昨晚出什么大事
  • 企业电商网站商城建设/搜索引擎优化seo信息
  • 平板做网站服务器/长沙优化科技有限公司
  • 做网站用java 还是php/北京千锋教育培训机构怎么样
  • 电信网站空间/安卓优化大师手机版下载
  • 注册了网站怎么建设/seo sem是什么意思
  • 网站备案加链接代码/网络推广怎么赚钱
  • 加强网站建设会/个人网站设计欣赏
  • 南京市建委网站下载中心建设工程招标/种子搜索神器
  • 网站建设销售问答/媒介星软文平台官网
  • 河南郑州网站推广优化外包/百度中心
  • 高级服装定制网站/网站建设运营
  • 做兼职哪个招聘网站比较靠谱/店铺推广软文范例
  • 网页设计毕业论文致谢/海外网站推广优化专员
  • 上海网站建设定制公/友情链接查询
  • 咸阳网站建设电话/长沙网站优化公司
  • 网站 意义/最打动人心的广告语
  • wordpress 隐私设置/重庆seo入门教程
  • 展示网站建设的ppt/百度直播推广
  • 深圳营销型网站制作公司/重庆网站seo好不好
  • 网站建设邮/网络推广运营优化
  • 做网络推广的网站/商丘网站优化公司
  • 门户网站建设制作/seo一个关键词多少钱
  • 大连网站建设企业/南京网站制作公司
  • 沙河高端网站建设/国外网站推广平台有哪些?
  • 太原网站制作/网站域名备案查询
  • 大型网站开发/班级优化大师怎么用