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

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 在这些状态间进行平滑的动画过渡,为用户提供连贯的操作体验。每个状态都定义了界面元素的可见性、位置、缩放比例、背景模糊/变暗程度等一系列视觉属性。

相关文章:

  • 重合闸的作用与技术解析
  • Server-Side Request Forgery服务器端请求伪造(ssrf)
  • PDFMathTranslate:让数学公式在PDF翻译中不再痛苦
  • PDF嵌入图片
  • 新闻数据接口开发指南:从多源聚合到NLP摘要生成
  • Linux的例行性工作(crontab)
  • 自动驾驶(ADAS)领域常用数据集介绍
  • Windows 安装 Yarn 的教程
  • 4.2.2 MySQL索引原理以及SQL优化
  • LangChain构建大模型应用之RAG
  • java-mybatis01
  • 大模型时代的具身智能:从虚拟到现实的智能体进化革命
  • 用Python做有趣的AI项目 2:用 Python 和 NLTK 构建一个聊天机器人
  • 深度解析如何将图像帧和音频片段特征高效存储到向量数据库 Milvus
  • 深入浅出JVM - Java架构师面试实战
  • 有源晶振输出匹配电阻选择与作用详解
  • Spring security详细上手教学(三)密码管理
  • 如何把握邮件发送的黄金时间?
  • 北京工业大学25计专上岸经验分享
  • Qt 中 QSQLITE 和 QODBC 数据库连接的区别
  • 上海第三家“胖永辉”在浦东开业,设立了外贸产品专区
  • 李祥翔评《孔子哲学思微》︱理性秩序与美学秩序的碰撞
  • 第二十届中国电影华表奖揭晓!完整获奖名单来了
  • 2025年上海空间信息大会举行,重大项目集中签约
  • 李彦宏:DeepSeek不是万能,多模态将是未来基础模型的标配
  • 美称中美贸易谈判仍在进行中,外交部:美方不要混淆视听