launcher的学习

Launcher是Android系统的"桌面",在android2.1之前采用的是launcher,android2.2之后采用的launcher2,他们之间最大的区别是launcher2有3D效果,不过launcher2整个系统的代码的改动还是比较大的。 

首先来介绍下launcher目录下的几个文件吧,我做简单说明: 
AddAdapter:添加桌面元素的适配器。 
AllAppsGridView:Icon列表的的主界面,继承gridView。 
DeleteZone:luancher的删除区域,继承ImageView。 
DragController:拖动控制接口。 
DragLayer:整个launcher的父节点,继承FrameLayout,实现接口DrayController。 
DragSource:拖动源接口,定义了void onDropCompleted(View target, boolean success)。 
DropTarget:拖动目标,定义很多拖动过程需要的方法:onDrop,onDragEnter,onDragOver,onDragExit,acceptDrop。 
HandleView:launcher抽屉的开关,不过在android2.2已经没用抽屉了。 
Launcher:整个launcher的程序的入口,代码量最大的一个文件。 
Workspace:整个界面layout,几个窗口就是他下面的子节点。 

我需要改动的就是模仿Mac系统,在桌面的底部加一个icon的列表功能,而且要求是把icon拖入拖出,首先上一张已经做出来的效果图: 
 

我首先列出我完成的几个主要源文件: 
DockProvider:持久化dock Item的元素。 
DockSettings:dock一些元素和uri信息。 
DockView:显示icon的布局,继承LinearLayout实现DropTarget,DragSource, DragController.DragListener,OnClickListener, View.OnLongClickListener接口。 

我在这里主要说下,实现原理,DockView是主要文件,它继承LinearLayout是为了它里面的元素水平摆放,直接用addView继承实现,继承系统的那些接口都是为了,接收到icon拖动的状态和信息。 

首先要在Launcher的setupViews函数里面初始化自己的layout,代码如下: 

01. private void setupViews() {
02. mDragLayer = (DragLayer) findViewById(R.id.drag_layer);
03. final DragLayer dragLayer = mDragLayer;
04.  
05. mWorkspace = (Workspace) dragLayer.findViewById(R.id.workspace);
06. final Workspace workspace = mWorkspace;
07.  
08. /*mDrawer = (SlidingDrawer) dragLayer.findViewById(R.id.drawer);
09. final SlidingDrawer drawer = mDrawer;*/
10.  
11. mAllAppsGrid = (AllAppsGridView) dragLayer.findViewById(R.id.content);
12. dock_view=(DockView)dragLayer.findViewById(R.id.dock_view);
13.  
14. dock_view.setLauncher(this);
15. dock_view.setDragger(mDragLayer);
16. dock_view.init();
17.  
18. //mAllAppsGrid.setVisibility(View.GONE);
19. final AllAppsGridView grid = mAllAppsGrid;
20.  
21. final background-image: none !important; background-color: initial !important; text-align: left !important; fl
分享到:
评论
z_guijin
  • 浏览: 7778 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

你可能感兴趣的:(android)