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

AOSP Android14 Launcher3——Launcher的状态介绍LauncherState类

Launcher3中有一个跟Launcher状态相关的类,叫LauncherState

LauncherState 是 Launcher3 中定义各种用户界面状态的抽象基类。你可以把它想象成一个状态机,定义了 Launcher 可能处于的不同视觉和交互模式,例如主屏幕、所有应用列表、最近任务概览等。StateManager 类负责管理这些状态之间的切换和过渡动画。

LauncherState 中定义的主要状态

LauncherState.java 文件中定义了多个核心状态,每个状态对应 Launcher 的一种界面布局和交互模式:

   /*** TODO: Create a separate class for NORMAL state.*///src/com/android/launcher3/LauncherState.javapublic static final LauncherState NORMAL = new LauncherState(NORMAL_STATE_ORDINAL,LAUNCHER_STATE_HOME,FLAG_DISABLE_RESTORE | FLAG_WORKSPACE_ICONS_CAN_BE_DRAGGED | FLAG_HAS_SYS_UI_SCRIM) {@Overridepublic int getTransitionDuration(Context context, boolean isToState) {// Arbitrary duration, when going to NORMAL we use the state we're coming from instead.return 0;}};/*** Various Launcher states arranged in the increasing order of UI layers*/public static final LauncherState SPRING_LOADED = new SpringLoadedState(SPRING_LOADED_STATE_ORDINAL);public static final LauncherState EDIT_MODE = new EditModeState(EDIT_MODE_STATE_ORDINAL);public static final LauncherState ALL_APPS = new AllAppsState(ALL_APPS_STATE_ORDINAL);public static final LauncherState HINT_STATE = new HintState(HINT_STATE_ORDINAL);public static final LauncherState HINT_STATE_TWO_BUTTON = new HintState(HINT_STATE_TWO_BUTTON_ORDINAL, LAUNCHER_STATE_OVERVIEW);public static final LauncherState OVERVIEW = new OverviewState(OVERVIEW_STATE_ORDINAL);public static final LauncherState OVERVIEW_MODAL_TASK = OverviewState.newModalTaskState(OVERVIEW_MODAL_TASK_STATE_ORDINAL);/*** State when user performs a quickswitch gesture from home/workspace to the most recent* app*/public static final LauncherState QUICK_SWITCH_FROM_HOME =OverviewState.newSwitchState(QUICK_SWITCH_STATE_ORDINAL);public static final LauncherState BACKGROUND_APP =OverviewState.newBackgroundState(BACKGROUND_APP_STATE_ORDINAL);public static final LauncherState OVERVIEW_SPLIT_SELECT =OverviewState.newSplitSelectState(OVERVIEW_SPLIT_SELECT_ORDINAL);
  1. NORMAL (普通状态 / 主屏幕)
    • 描述: 这是 Launcher 的默认状态,显示用户的主屏幕 Workspace 和 Hotseat。
    • 触发: 应用启动时、从其他状态(如 All Apps、Overview)通过 Home 键或 Back 键返回时。

NORMAL状态就是默认的桌面状态
NORMAL

  1. SPRING_LOADED (弹簧加载状态)
    • 描述: 当用户长按 Workspace 上的图标或小部件并开始拖动时进入的状态。通常用于准备移动项目或卸载应用等操作,界面可能会有轻微的视觉变化(如缩放)。
    • 触发: 在 Workspace 上长按并拖动图标/小部件。

这个也很好理解
SPRING_LOADED

  1. ALL_APPS (所有应用列表)
    • 描述: 显示包含所有已安装应用图标的列表或抽屉。
    • 触发: 通常从 NORMAL 状态向上滑动触发。

ALL_APPS

  1. HINT_STATE / HINT_STATE_TWO_BUTTON (提示状态)

    • 描述: 在用户执行向上滑动进入 All Apps 或 Overview 的手势过程中,出现的中间过渡状态。界面元素(如 Workspace、Hotseat)开始移动或变化,可能会显示一个上滑提示箭头。HINT_STATE_TWO_BUTTON 是针对两键导航模式的变体。
    • 触发: 从 NORMAL 状态开始向上滑动。
  2. OVERVIEW (概览状态 / 最近任务)

    • 描述: 显示最近使用的应用程序的任务卡片列表(轮播或网格形式),允许用户切换、关闭或管理任务。这是 OVERVIEW_MODAL_TASK 的基础状态。
    • 触发: 完成向上滑动并暂停的手势、点击导航栏的“最近任务”按钮(三键导航)。
      OVERVIEW
  3. OVERVIEW_MODAL_TASK (概览模态任务)

    • 描述: 见上文详解。突出显示单个任务卡片的状态。
    • 触发: 在 OVERVIEW 状态下与单个任务卡片交互以准备执行特定操作(非启动)。
      OVERVIEW_MODAL_TASK
  4. QUICK_SWITCH (快速切换状态)

    • 描述: 用于在最近使用的两个或多个应用之间快速切换的状态,通常伴随着一个水平滑动手势或类似 Alt-Tab 的交互。
    • 触发: 在手势导航下,沿着屏幕底部边缘快速水平滑动。
      QUCIK_SWITCH
  5. BACKGROUND_APP (后台应用状态)

    • 描述: 当用户从一个正在运行的应用向上滑动,但手势尚未完成进入 OVERVIEW 状态时的中间状态。此时,正在运行的应用窗口通常会缩小并跟随手指移动,背景可能是模糊的 Launcher 界面。
    • 触发: 从一个应用内部开始执行上滑手势。

BACKGROUND_APP
其他应用启动时Launcher就处于BACKGROUND_APP状态

  1. OVERVIEW_SPLIT_SELECT (概览分屏选择状态)
    • 描述: 当用户在 OVERVIEW 状态下选择了一个任务进行分屏后,界面会进入此状态,等待用户选择第二个要分屏的应用。第一个选中的应用通常会停留在屏幕一侧的占位符中。
    • 触发: 在 OVERVIEW 状态下,点击任务卡片上的“分屏”按钮或执行相应的分屏手势。
      OVERVIEW_SPLIT_SELECT

这些状态共同构成了 Launcher3 的核心交互模型,通过 StateManager 在这些状态间进行平滑的动画过渡,为用户提供连贯的操作体验。每个状态都定义了界面元素的可见性、位置、缩放比例、背景模糊/变暗程度等一系列视觉属性。

http://www.xdnf.cn/news/2379.html

相关文章:

  • 文章记单词 | 第49篇(六级)
  • 20250427 对话1: 何东山的宇宙起源理论
  • Java学习-Java基础
  • JavaEE-多线程实战01
  • VScode在 Markdown 编辑器中预览
  • err: Error: Request failed with status code 400
  • 大模型——Spring.new快速构建AI驱动的定制化商业应用
  • 在线教育系统开发常见问题及解决方案:源码部署到运营维护
  • 关系型数据库PostgreSQL for Mac 保姆级使用教程
  • iOS自定义电池电量显示控件 BatteryView 实现
  • 【Java】分布式事务解决方案
  • 【Axure高保真原型】3级多选下拉列表
  • 统信操作系统使用默认yum源安装 Docker 的踩坑
  • 基于 Playwright 构建小型分布式爬虫(进阶版)
  • 关于指针和指针算术
  • [论文梳理] 足式机器人规划控制流程 - 接触碰撞的控制 - 模型误差 - 自动驾驶车的安全合规(4个课堂讨论问题)
  • 误触网络重置,笔记本电脑wifi连接不上解决方法(Win10,Win11通用)
  • JS-OCR-demo加载本地文件
  • 直播预告|TinyVue 组件库高级用法:定制你的企业级UI体系
  • 仿微信上传头像,实现拍摄、相册选择、手动缩放、裁剪、蒙版、撤回、还原、上传微信本地文件功能
  • 【C++】类和对象(上)
  • 【质量管理】TRIZ(萃智)的工程系统进化法则
  • GAEA情感坐标的技术架构与系统集成
  • 机器学习基础理论 - 分类问题评估指标
  • 【AI模型学习】GPT——从v1到v3
  • JavaScript输出数据的方法
  • 高并发架构设计之缓存
  • 快速上手 MetaGPT
  • 【Flutter】Flutter + Unity 插件结构与通信接口封装
  • 继续 那个错误分析