Launcher 整体概述

概述

初识launcher3源码,可以发现有个最重要的Activity,即Launcher.java

重要组成部分

  • Workspace 工作区
    • 工作区是一个带有墙纸和有限页数的广阔区域。每个页面都包含许多用户可以与之交互的图标、文件夹或小部件。工作空间仅用于固定宽度。
  • CellLayout 单元格布局
    • Workspace中显示多页,每一页就是一个CellLayout。
  • Hotseat 热门位置
    • 受欢迎的位置,即为桌面底部常驻的快捷建布局
  • DragLayer 拖动层
    • 一个用来负责分发事件的ViewGroup
  • DragController:拖动控制器
    • DragLayer只是一个ViewGroup,具体的拖拽的处理都放到了DragController中。
  • Srim 幕布
    • 一个容易被忽略的幕布view,但在不同状态间切换却扮演着遮挡布局作用
  • QsbWidget QuickSearchBarWidget 快速搜索栏小部件
    • 显示在workspace的第一页CellLayout 顶部的搜索栏

Launcher 主要继承关系

基于Android GO

事件处理组成部分

在正式看事件分发(后续文章)之前,我们先来看下,事件处理组成部分都有哪些类

  1. launcher.xml 主布局中可以看到根view是 LauncherRootView,但这个View并没有重写任何事件方法,即不做事件分发与拦截
  2. 接下来引入的是 DragLayer,实际上是一个 FrameLayout
  3. DragLayer 这个类采用组合引入的方式,将事件交给了 TouchController
  4. 我们从代码中找到到 Launcher 在启动的时候会添加四个 TouchController
    path: com.android.launcher3.uioverrides.QuickstepLauncher#createTouchControllers
@Override
public TouchController[] createTouchControllers() {
    Mode mode = SysUINavigationMode.getMode(this);

    ArrayList<TouchController> list = new ArrayList<>();
    list.add(getDragController());
    switch (mode) {
        case NO_BUTTON:
            list.add(new NoButtonQuickSwitchTouchController(this));
            list.add(new NavBarToHomeTouchController(this));
            list.add(new NoButtonNavbarToOverviewTouchController(this));
            break;
        case TWO_BUTTONS:
            list.add(new TwoButtonNavbarTouchController(this));
            list.add(getDeviceProfile().isVerticalBarLayout()
                    ? new TransposedQuickSwitchTouchController(this)
                    : new QuickSwitchTouchController(this));
            list.add(new PortraitStatesTouchController(this));
            break;
        case THREE_BUTTONS:
        default:
            list.add(new PortraitStatesTouchController(this));
    }

    if (!getDeviceProfile().isMultiWindowMode) {
        list.add(new StatusBarTouchController(this));
    }

    list.add(new LauncherTaskViewController(this));
    return list.toArray(new TouchController[list.size()]);
}

实际上会添加四个controoler

  • LauncherDragController
  • PortraitStatesTouchController
  • StatusBarTouchController
  • LauncherTaskViewController
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容