launcher架构剖析,android音视频口试题

打印 上一主题 下一主题

主题 963|帖子 963|积分 2889

第二张:

通过这两张图,简单的说下:
整个launcher,准确来说应该是homescreen更为符合,是一个包罗三个child view的FrameLayout(com.android.launcher.DragLayer)。
第一个child就是桌面com.android.launcher.Workspace。这个桌面又包罗5个child。每个child就对应一个桌 面。这就是你在Android上看到的五个桌面。每个桌面上可以放置下列对象:应用快捷方式,appwidget和folder。(第一张图应该是以前版本的,在2.2以前的版本应该是只有三个桌面,在2.3中,有五个桌面)
第二个child是一个SlidingDrawer控件,这个控件由两个子控件构成。一个是 com.android.launcher.HandleView,就是Android桌面下方的把手,当点击这个把手时,另一个子控 件,com.android.launcher.AllAppsGridView就会弹出,这个子控件列出系统中当前安装的全部类型为 category.launcher的Activity。
第三个child是com.android.launcher.DeleteZone。当用户在桌面上长按一个widget时,把手位置就会出现一个垃圾桶形状的控件,就是这个控件。(着实在2.2以后的版本中,在左下方和右下方添加了页面标志,来告诉用户当前在哪个桌面,其代码在launcher.xml代码中,
[html]  view plain copy

  • <ImageView
  • android:id=“@+id/previous_screen”
  • android:layout_width=“93dip”
  • android:layout_height=“@dimen/button_bar_height”
  • android:layout_gravity=“bottom|left”
  • android:layout_marginLeft=“6dip”
  • android:scaleType=“center”
  • android:src=“@drawable/home_arrows_left”
  • androidnClick=“previousScreen”
  • android:focusable=“true”
  • android:clickable=“true” />
  • <ImageView
  • android:id=“@+id/next_screen”
  • android:layout_width=“93dip”
  • android:layout_height=“@dimen/button_bar_height”
  • android:layout_gravity=“bottom|right”
  • android:layout_marginRight=“6dip”
  • android:scaleType=“center”
  • android:src=“@drawable/home_arrows_right”
  • androidnClick=“nextScreen”
  • android:focusable=“true”
  • android:clickable=“true” />
下面就是launcher中重要类的简介:
AddAdapter:添加桌面元素的适配器, 维护了live fold  , widget , shortcut , wallpaper 4个ListItem , 长按桌面会表现该列表
AllAppsGridView:Icon列表的的主界面,继承gridView。
ApplicationInfo:一个可启动的应用。
ApplicationsAdapter:gridview的adapter。
BubbleTextView:一个定制了的textview,重要用于表现应用图标。
DeleteZone:luancher的删除地区,继承ImageView。在平时是出于隐藏状态,在将item长按拖动的时间会表现出来,假如将item拖动到删除框位置时会删除item。   DeleteZone实现了DropTarget和DragListener两个接口。
DragController:拖动控制接口。为Drag界说的一个接口。包罗一个接口,两个方法和两个静态常量。接口为DragListener(包罗onDragStart(),onDragEnd()两个函数),onDragStart()是在刚开始拖动的时间被调用,onDragEnd()是在拖动完成时被调用。在launcher中典型的应用是DeleteZone,在长按拖动item时调用onDragStart()表现,在拖动竣事的时间onDragEnd()隐藏。两个函数包括startDrag()和setDragItemInfo().startDrag()用于在拖动是传递要拖动的item的信息以及拖动的方式,setDragItemInfo()用于传递item的参数信息(包括位置以及大小)。两个常量为DRAG_ACTION_MOVE,DRAG_ACTION_COPY来标识拖动的方式,DRAG_ACTION_MOVE为移动,表如今拖动的时间必要删除原来的item,DRAG_ACTION_COPY为复制型的拖动,表现保留被拖动的item。
DragLayer:整个launcher的父节点,继承FrameLayout,实现接口DrayController,是内部支持拖拽的viewgroup。DragLayer实际上也是一个抽象的界面,用来处理拖动和对事件进行初步处理然后按情况分发下去,脚色是一个controller。它首先用onInterceptTouchEvent(MotionEvent)来拦截全部的touch事件,假如是长按item拖动的话不把事件传下去,直接交由onTouchEvent()处理,这样就可以实现item的移动了,假如不是拖动item的话就把事件传到目标view,交有目标view的事件处理函数做相应处理。如过有要对事件的特殊需求的话可以修改onInterceptTouchEvent(MotionEvent)来实现所必要的功能。
DragSource:拖动源接口,界说了void onDropCompleted(View target, boolean success)。
DropTarget:拖动目标,界说许多拖动过程必要的方法:onDrop,onDragEnter,onDragOver,onDragExit,acceptDrop。
FastBitmapDrawable:工具
Folder:Icons的集合
FolderIcon:出如今workspace的icon 代表了一个folder
FolderInfo: ItemInfo子类
HandleView:launcher抽屉的开关,不外在android2.2已经没用抽屉了。
InstallShortcutReceiver,UninstallShortcutReceiver:一个broadcastrecier
ItemInfo:代表Launcher中一个Item(例如folder)对item的抽象,全部类型item的父类,item包罗的属性有id(标识item的id),cellX(在横向位置上的位置,从0开始),cellY(在纵向位置上的位置,从0开始) ,spanX(在横向位置上所占的单元格),spanY(在纵向位置上所占的单元格),screen(在workspace的第几屏,从0开始),itemType(item的类型,有widget,search,application等),container(item所在的)。
Launcher:整个launcher的程序的入口,代码量最大的一个文件。
LauncherApplication:在VM中设置参数
LauncherAppWidgetHost,LauncherAppWidgetHostView,:Widget相关
LauncherModel: MVC中的M,里面有许多封装的对数据库的操作。包罗几个线程,其中最重要的是ApplicationsLoader和DesktopItemsLoader。ApplicationsLoader在加载全部应用程序时使用,DesktopItemsLoader在加载workspace的时间使用。其他的函数就是对数据库的封装,比如在删除,更换,添加程序的时间做更新数据库和UI的工作。
LauncherProvider**

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

光之使者

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表