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.pswp.cn/diannao/81186.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/81186.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/81186.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

鴻蒙NEXT開發動畫(方塊動畫旋轉)

1.創建空白項目 2.Page文件夾下面新建Spin.ets文件,代碼如下: /*** SpinKit 風格的旋轉加載動畫組件。** component* param spinSize - 動畫容器大小(必須為正數)* param spinColor - 動畫顏色(支持資源引用&#xf…

深入解析Java架構師面試:從核心技術到AI應用

深入解析Java架構師面試:從核心技術到AI應用 在互聯網大廠的Java求職者面試中,技術深度和項目經驗是成功的關鍵。本文以嚴肅的面試官與資深Java架構師馬架構(擁有十年研發及架構設計經驗)之間的對話為背景,詳細展示了…

Qt窗口關閉特效:自底而上逐漸消失

廢話不多說,直接上代碼: 構造函數: MyWidget(QWidget *parent nullptr) {// 設置窗口屬性:支持透明背景setAttribute(Qt::WA_TranslucentBackground);// 移除窗口邊框setWindowFlags(Qt::FramelessWindowHint);} closeEvent函數…

AI對IT行業的重塑:挑戰與機遇并存的技術革命

一、必要性:AI成為IT行業的基礎設施 在云計算、大數據和物聯網構成的數字生態中,AI技術已成為IT行業的"水電煤"。以微軟Azure為例,其AI云服務支撐著全球超過85%的《財富》500強企業,通過機器學習模型自動優化服務器集群…

[論文梳理] 足式機器人規劃控制流程 - 接觸碰撞的控制 - 模型誤差 - 自動駕駛車的安全合規(4個課堂討論問題)

目錄 問題 1:足式機器人運動規劃 & 控制的典型流程 (pipline) 1.1 問題 1.2 目標 1.3 典型流程(Pipeline) 1.3.1 環境感知(Perception) 1.3.2 高層規劃(High-Level Planning) 1.3.3 …

阿里云短信接入實現示例

1&#xff09;構建Springboot項目 2) 添加依賴 <!--阿里云短信--> <dependency><groupId>com.aliyun</groupId><artifactId>alibabacloud-dysmsapi20170525</artifactId><version>3.0.0</version> </dependency><…

邏輯回歸之參數選擇:從理論到實踐

一、邏輯回歸概述 邏輯回歸雖然名字中帶有“回歸”&#xff0c;但它是一種用于處理二分類或多分類問題的算法。其核心思想是通過構建一個線性模型&#xff0c;將輸入特征進行線性組合&#xff0c;再利用邏輯函數&#xff08;如Sigmoid函數&#xff09;將線性組合的結果映射到0…

綜合案例建模(1)

文章目錄 滾花手扭螺絲機箱封蓋螺絲螺絲孔錐形墊片 滾花手扭螺絲 前視基準面畫草圖&#xff0c;旋轉生成主體 倒角0.5 頂面&#xff0c;草圖轉換實體引用&#xff0c;去復制邊線 生成螺旋線路徑 頂面繪制草圖 上一步畫的草圖沿螺旋線掃描切除 鏡像掃描特征 陣列鏡像掃描特征 創…

SQL語句練習 自學SQL網 多表查詢

目錄 Day 6 用JOINs進行多表聯合查詢 Day 7 外連接 OUTER JOINs Day 8 外連接 特殊關鍵字 NULLs Day 6 用JOINs進行多表聯合查詢 SELECT * FROM Boxoffice INNER JOIN movies ON movies.idboxoffice.Movie_id;SELECT * FROM Boxoffice INNER JOIN moviesON movies.idboxoffi…

游戲引擎學習第247天:簡化DEBUG_VALUE

歡迎。關于紋理傳輸的詳細情況。 上周我們剛剛完成了紋理下載的相關工作&#xff0c;但實際上并沒有完全解決這個問題。問題的核心是&#xff0c;當前關于紋理下載的正確方式仍然存在較大的不確定性。盡管我們在進行紋理下載的工作時已有一定進展&#xff0c;但依舊有不少模糊…

python將字符串轉成二進制數組

python將字符串轉成二進制數組 功能概述&#xff1a; save_binary_to_json() 函數&#xff1a;將字符串轉換為二進制數據&#xff08;字節的整數表示&#xff09;&#xff0c;并保存到JSON文件中。 load_binary_from_json() 函數&#xff1a;從JSON文件中讀取二進制數據并還原…

【springboot知識】配置方式實現SpringCloudGateway相關功能

配置方式實現SpringCloudGateway相關功能 Spring Cloud Gateway 核心功能與實戰實現指南一、核心功能架構二、六大核心功能實現1. 動態路由配置2. 斷言(Predicate)配置3. 過濾器(Filter)配置4. 負載均衡配置5. 熔斷降級配置6. 限流配置 三、高級配置技巧1. 跨域配置2. 重試機制…

Windows 10 環境二進制方式安裝 MySQL 8.0.41

文章目錄 初始化數據庫配置文件注冊成服務啟停服務鏈接服務器登錄之后重置密碼卸載 初始化數據庫 D:\MySQL\MySQL8.0.41\mysql-8.0.41-winx64\mysql-8.0.41-winx64\bin\mysqld -I --console --basedirD:\MySQL\MySQL8.0.41\mysql-8.0.41-winx64\mysql-8.0.41-winx64 --datadi…

流式通信技術對比:SSE vs WebSocket 應用場景與最佳實踐

在構建動態、實時交互的現代 Web 應用時&#xff0c;實時通信能力至關重要。Server-Sent Events&#xff08;SSE&#xff09; 和 WebSocket 是當前最主流的兩種技術方案&#xff0c;它們都支持服務器主動向客戶端推送數據&#xff0c;但在通信模式、應用場景和實現復雜度上存在…

復雜度和順序表(雙指針方法)

目錄 目錄 目錄 前言&#xff1a; 一、時間復雜度和空間復雜度 1.1概念 1.2規則 二、順序表 2.1靜態順序表 2.2動態順序表 三、雙指針法 四、總結 前言&#xff1a; 時間復雜度和空間復雜度是用于判斷算法好壞的指標&#xff0c;程序性能的核心指標。時間復雜度主要衡…

flutter 專題 六十四 在原生項目中集成Flutter

概述 使用Flutter從零開始開發App是一件輕松愜意的事情&#xff0c;但對于一些成熟的產品來說&#xff0c;完全摒棄原有App的歷史沉淀&#xff0c;全面轉向Flutter是不現實的。因此使用Flutter去統一Android、iOS技術棧&#xff0c;把它作為已有原生App的擴展能力&#xff0c;…

Java高階程序員學習計劃(詳細到天,需有一定Java基礎)

??致敬讀者 ??感謝閱讀??笑口常開??生日快樂?早點睡覺??博主相關 ??博主信息??博客首頁??專欄推薦??活動信息文章目錄 Java高階程序員學習計劃(詳細到天,需有一定Java基礎)第一階段(30天)Java基礎:Java生態工具鏈:設計模式與編碼規范:第二階段(15天…

JS自動化獲取網站信息開發說明

一、自動獲取信息的必要性 1. 提高效率與節省時間 批量處理&#xff1a;自動化可以快速抓取大量數據&#xff0c;比人工手動操作快得多。 24/7 運行&#xff1a;自動化工具可以全天候工作&#xff0c;不受時間限制。 減少重復勞動&#xff1a;避免人工反復執行相同的任務&am…

Android Kotlin 依賴注入全解:Koin appModule 配置與多 ViewModel 數據共享實戰指南

一、基礎配置與概念 1. 什么是 appModule appModule 是 Koin 依賴注入框架中的核心配置模塊&#xff0c;用于集中管理應用中的所有依賴項。它本質上是一個 Koin 模塊&#xff08;org.koin.core.module.Module&#xff09;&#xff0c;通過 DSL 方式聲明各種組件的創建方式和依…

學習記錄:DAY21

我的開發日志&#xff1a;類路徑掃描、DI 容器與動態代理 前言 我失憶了&#xff0c;完全不記得自己早上干了什么。 日程 早上 10 點左右開始&#xff0c;學了一早上&#xff0c;主要是類路徑掃描相關的調試。 晚上 8 點了&#xff0c;真不能再摸&#x1f41f;了。 學習記錄 計…