Launcher模块总结

本文深入剖析了Android Launcher的主要组件和类,包括Launcher.java、LauncherApplication.java、IconCache.java、LauncherModel.java、LauncherProvider.java等,详细阐述了它们的功能和作用。此外,还介绍了桌面布局、数据库管理、拖放操作等相关组件的工作原理,如DragLayer、DeleteZone和DragController等,展示了Launcher的完整工作流程。
摘要由CSDN通过智能技术生成

一.主要文件和类

1.Launcher.java:launcher中主要的activity。系统第一个启动的应用程序,在AndroidManifest.xml中定义了<category android:name="android.intent.category.HOME" />

2.LauncherApplication.java:应用程序全局初始化类,创建全局使用的应用程序缓存器Iconcache,创建全局使用的数据库加载类LauncherModel,注册事件监听器,注册数据库变化监听器

(在AndroidManifest.xml定义的Application)

3.IconCache.java:应用程序缓存器,通过一个HashMap<ComponentName,CacheEntry> mcache来缓存应用程序信息。内部类CachEntry对应存储应用程序的基本信息。makeDefaultIcon来创建默认的应用程序图标

4.LauncherModel.java:模型文件,封装了对数据库的操作。包含几个线程,加载所有应用程序和workspace的时候使用(loadAndBindAllApps,loadAndBindWorkspace)。其他的函数就是对数据库的封装,接口Callbacks提供加载程序和快捷方式的抽象方法。

5.LauncherProvider.java:launcher的数据库,里面存储了桌面的item的信息。在创建数据库的时候会调用loadFavorites(db)方法,解析xml目录下的default_workspace.xml文件,把其中的内容读出来写到数据库中,这样就得到了默认桌面的配置。

6.ItemInfo.java:item的抽象,所有类型item的父类,item包含的属性有id(标识item的id),cellX(在横向位置上的位置,从0开始),cellY(在纵向位置上的位置,从0开始) ,spanX(在横向位置上所占的单位格),spanY(在纵向位置上所占的单位格),screen(在workspace的第几屏,从0开始),itemType(4种item类型,有widget,user_folder,application,shortcut),container(三种item存放的地方desktop,application,user_folder)。

7.Workspace.java:抽象的桌面。由N个cellLayout组成, 从cellLayout更高一级的层面上对事件的处理。Launcher.java中通过bindItems添加cellLayout.实现了DropTarget, DragSource, DragScroller。既是拖拽源,又是拖拽目的地,还可以左右拖动。

8.CellLayout.java桌面的某一屏。是组成workspace的view,被划分成4X4的cell空间,用boolean[][]mOccupied来标识每个cell是否被占用.

9.AllApp2D.java:显示和存储应用程序列表的视图。。android自带的AllApp2D包括一个GridView和一个HomeButton,MTK修改成PagerControl,HorizontalPager和4个imageview。

10.HorizontalPager.java:AllApp2D中间的网格控件。由N个GridView组成,AllApps2D.java中通过addGridView添加GridView。

11.DeleteZone.java:删除框。在平时是出于隐藏状态,在将item长按拖动的时候会显示出来,如果将item拖动到删除框位置时会删除item。DeleteZone实现了DropTarget和DragListener两个接口。

12.DragLayer.java:launcher.xmlrootview。DragLayer实际上也是一个抽象的界面,用来处理拖动和对事件进行初步处理然后按情况分发下去,角色是一个DragController。它首先用onInterceptTouchEvent(MotionEvent)来拦截所有的touch事件,如果是长按item拖动的话不把事件传下去,直接交由onTouchEvent()处理,这样就可以实现item的移动了,如果不是拖动item的话就把事件传到目标view,交有目标view的事件处理函数做相应处理。

13. DragController.java:为拖拽定义的一个接口。包含一个接口,一个方法和两个静态常量。

接口为DragListener(包含onDragStart(),onDragEnd()两个函数),

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值