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

茶叶企业网站源码湖南长沙景点

茶叶企业网站源码,湖南长沙景点,红旗h5,南阳网站制作公司前言:TaskViewSimulator 这个类在最近任务中起到了一个非常重要的作用。 从字面意思上理解,这个单词是由TaskViewSimulator组合而来,字面意思就是TaskView的模拟器,顾名思义,就是一个用来模拟TaskView的类。 为什么要模…

前言:TaskViewSimulator 这个类在最近任务中起到了一个非常重要的作用。
从字面意思上理解,这个单词是由TaskView+Simulator组合而来,字面意思就是TaskView的模拟器,顾名思义,就是一个用来模拟TaskView的类。
为什么要模拟TaskView呢?这个类跟TaskView本身又有什么关系和区别呢?本文来详解一下这个类。

我们来详细解释一下 quickstep/src/com/android/quickstep/util/TaskViewSimulator.java 这个类的作用。

核心作用 (Core Purpose):

TaskViewSimulator 的核心作用是模拟(Simulate)一个应用窗口(由 RemoteAnimationTarget 代表,本质是一个 SurfaceControl Leash)在手势导航过程中,从全屏状态过渡到最近任务(RecentsView)中的任务卡片(TaskView)外观所需的视觉变换(Visual Transformation)

简单来说,当你在屏幕底部上滑时,你看到的那个正在缩小的应用窗口,它的大小、位置、裁剪区域、圆角等视觉属性,并不是直接由 RecentsView 里的 TaskView 控制的,而是由 TaskViewSimulator 计算出来,然后应用到系统层级的应用窗口 Leash 上的。它扮演了一个**“虚拟 TaskView 布局计算器”**的角色。

为什么需要模拟?(Why Simulation is Needed):

  1. 解耦 (Decoupling): 最近任务动画是由 SystemUI (WindowManager/Shell) 发起的,它控制的是应用窗口的真实 Surface。而 RecentsViewTaskView 是 Launcher 应用内部的 UI 组件。直接让 Launcher 的 View 去控制系统级的 Surface 是不合适的,也存在进程间通信的复杂性。
  2. 性能 (Performance): 在手势进行的每一帧,直接操作和重新布局 Launcher 的 RecentsViewTaskView 来匹配窗口动画,开销会非常大。模拟计算变换参数然后应用到 Surface 上效率更高。
  3. 精确匹配 (Exact Matching): TaskViewSimulator 通过模拟 RecentsViewTaskView 的布局逻辑(包括滚动、缩放、全屏进度等),确保应用窗口 Leash 的视觉效果能精确地匹配用户在 RecentsView 中看到的卡片位置和外观,实现无缝过渡。

主要功能和协调方式 (Key Functions and Coordination):

  1. 接收输入参数 (Receiving Inputs):

    • 目标信息 (setPreview, setPreviewBounds): 接收 RemoteAnimationTarget,从中获取应用窗口的初始边界 (startBounds/screenSpaceBounds) 和内容边距 (contentInsets)。这是模拟的“起点”。
    • 布局环境 (setDp, setOrientationState): 设置当前的 DeviceProfile (屏幕尺寸、密度、方向等) 和 RecentsOrientedState (处理不同屏幕方向下的布局)。这是计算目标布局的基础。
    • 动画状态 (AnimatedFloat 属性): 持有一系列 AnimatedFloat 变量,如 fullScreenProgress (0=全屏, 1=概览)、recentsViewScale (概览缩放)、recentsViewScroll (概览滚动偏移)、taskPrimaryTranslation 等。这些变量通常由手势处理器(如 AbsSwipeUpHandler)根据用户的滑动距离和速度来更新,代表了当前动画的进度。
    • 分屏信息 (setPreview(..., SplitBounds)): 如果是分屏模式,接收分屏布局信息。
  2. 模拟计算 (Simulation Calculation):

    • getFullScreenScale(): 计算当应用窗口完全进入 RecentsView 时的目标缩放比例和缩放中心点 (mPivot)。这个计算考虑了 DeviceProfile 和任务卡片的标准尺寸。
    • apply(TransformParams params): 这是核心计算方法。它在每一帧动画更新时被调用:
      • 检查布局是否有效 (mLayoutValid),如果设备配置或方向状态改变,则重新计算基础布局(如任务卡片在 RecentsView 中的目标位置 mTaskRect,缩略图变换矩阵 mPositionHelper)。
      • 获取当前所有 AnimatedFloat 输入的值(进度、滚动、缩放等)。
      • 结合 mPositionHelper(模拟缩略图定位)、mTaskRect(模拟卡片目标位置)、mPivot(缩放中心)以及各种平移和缩放值,计算出一个最终的变换矩阵 (mMatrix)。这个矩阵描述了如何将原始的应用窗口内容变换到当前模拟的 TaskView 外观。
      • 计算应用窗口应该被裁剪的区域 (mTmpCropRect),使得只有模拟 TaskView 的部分可见。
      • 计算应用窗口应该应用的圆角半径 (getCurrentCornerRadius()),使其匹配 TaskView 的圆角。
    • onBuildTargetParams(...): 实现 TransformParams.BuilderProxy 接口,将 apply() 方法计算出的 mMatrix, mTmpCropRect, getCurrentCornerRadius() 以及可能的层级顺序 (setLayer) 填充到 SurfaceProperties 对象中。
  3. 输出变换参数 (Outputting Transform Parameters):

    • TaskViewSimulator 本身不直接操作 Surface。它的计算结果(Matrix, Crop, Corner Radius)会通过 TransformParams 对象传递出去。
    • 调用者(通常是 AbsSwipeUpHandler 或其创建的动画类)会获取这些参数,并使用 SurfaceControl.Transaction 将这些变换应用到 RemoteAnimationTarget 对应的真实应用窗口 Leash 上。

协调关系总结:

  • AbsSwipeUpHandler (或其他手势/动画控制器):
    • 根据用户手势更新 TaskViewSimulatorAnimatedFloat 输入值 (进度、滚动等)。
    • 调用 TaskViewSimulator.apply(params) 来获取计算出的变换参数。
    • 将获取到的参数应用到实际的 SurfaceControl Leash。
  • RecentsView:
    • 其布局逻辑(如卡片大小、间距、滚动行为)被 TaskViewSimulator 模拟。
    • RecentsView 滚动时,其滚动偏移量会作为输入 (recentsViewScroll.value) 提供给 TaskViewSimulator,用于计算窗口的横向/纵向跟随移动。
  • RemoteAnimationTarget:
    • 提供了 TaskViewSimulator 需要模拟的原始窗口信息(Leash、初始Bounds、Insets)。
    • TaskViewSimulator 计算结果的最终应用对象。

总之,TaskViewSimulator 是一个关键的转换器和计算引擎。它将手势进度和 RecentsView 的布局状态,转换为对系统级应用窗口 Surface 的精确视觉控制参数,从而实现了从全屏应用到 RecentsView 卡片的流畅、视觉一致的动画效果。


文章转载自:

http://2ZTKRnjp.wnmdt.cn
http://m7RNL5xF.wnmdt.cn
http://3hSBktAo.wnmdt.cn
http://iztLsxy6.wnmdt.cn
http://QJVUXsh2.wnmdt.cn
http://eTU3uGOG.wnmdt.cn
http://DfptS7A0.wnmdt.cn
http://A0BlUCpJ.wnmdt.cn
http://33JfMdCh.wnmdt.cn
http://aqVrcHeA.wnmdt.cn
http://hwLLcahh.wnmdt.cn
http://Neklzm9w.wnmdt.cn
http://5fVF70nA.wnmdt.cn
http://NDy0X7R4.wnmdt.cn
http://T754aMyX.wnmdt.cn
http://jkdkKV67.wnmdt.cn
http://4Ep1spnB.wnmdt.cn
http://bAvLWSn7.wnmdt.cn
http://WJGpVGD3.wnmdt.cn
http://QgGDiC6l.wnmdt.cn
http://IbaVJfaV.wnmdt.cn
http://ersWKP8U.wnmdt.cn
http://UXl3tIyv.wnmdt.cn
http://F9PS5uy2.wnmdt.cn
http://77kjSsHW.wnmdt.cn
http://0rjQDlWj.wnmdt.cn
http://pctzaFOW.wnmdt.cn
http://i5xjNzlV.wnmdt.cn
http://c7uqhrvv.wnmdt.cn
http://8PEFW5G0.wnmdt.cn
http://www.dtcms.com/wzjs/720023.html

相关文章:

  • 伊犁网站制作合肥中科大网站开发
  • 成都科技网站建设如何做一个公司的网站
  • 乐清做网站的网站开发项目实训报告
  • 天门网站什么网站是专门做艺术字的
  • 岳阳二手房网站怎样做自己网站
  • 惠州住房和城乡建设局网站品牌策划公司怎么找客户
  • 平湖新埭哪里有做网站的青岛关键词优化报价
  • 北京网站开发周期wordpress 运行好慢
  • 用asp做的网站有哪些关键词网络推广企业
  • 做网站需要准备哪些专业做汽配的网站
  • 最早做美食团购的网站平昌移动网站建设
  • 商务网站设计制作好的工具和方法wordpress自定义面板
  • 网上做头像用什么网站恩施seo搜索引擎优化
  • wordpress站点logo设置做视频网站玩什么配置
  • 电商网站需要多少钱中国网站备案
  • 本子网站建设浏览器打不开wordpress
  • 一个网站如何产生流量国外图片网站源码
  • 网站上线前要做哪些准备建立网站的服务器
  • 织梦系统网站打开速度慢管理咨询公司属于什么行业
  • 机械建设网站房地产市场现状
  • 小说网站 做百度联盟成都创新互联做的网站怎么样
  • 最好的dm单网站建设贴图库外链图床wordpress插件
  • 工程网站模板免费下载手机app
  • 网站移动端怎么做的王占山人物简介
  • 阳江网站设计公司小程序商城开发公司哪个好
  • 求生之路2怎么做非官方网站如何做网站的后台管理
  • 地方门户网站推广方案建网站的公司
  • 福州房地产网站建设WordPress全站跳转
  • 模板建站流程网站域名备案多长时间
  • 西安做网站建设的公司网页传奇游戏排行榜比亚迪