Android之Launcher的小试心得

Linux大全评论528 views阅读模式

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

相关阅读 : Android开发:为launcher添加一个仿Mac的Dock(附源码) http://www.linuxidc.com/Linux/2011-09/44161.htm

首先来介绍下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拖入拖出,首先上一张已经做出来的效果图:

Android之Launcher的小试心得

   private void setupViews() {
       mDragLayer = (DragLayer) findViewById(R.id.drag_layer);
       final DragLayer dragLayer = mDragLayer;

       mWorkspace = (Workspace) dragLayer.findViewById(R.id.workspace);
       final Workspace workspace = mWorkspace;

       /*mDrawer = (SlidingDrawer) dragLayer.findViewById(R.id.drawer);
       final SlidingDrawer drawer = mDrawer;*/

       mAllAppsGrid = (AllAppsGridView) dragLayer.findViewById(R.id.content);
       dock_view=(DockView)dragLayer.findViewById(R.id.dock_view);
       
       dock_view.setLauncher(this);
       dock_view.setDragger(mDragLayer);
       dock_view.init();
       
//mAllAppsGrid.setVisibility(View.GONE);
       final AllAppsGridView grid = mAllAppsGrid;

       final DeleteZone deleteZone = (DeleteZone) dragLayer.findViewById(R.id.delete_zone);

       mHandleView = (HandleView) dragLayer.findViewById(R.id.all_apps);
       mHandleView.setLauncher(this);
       //mHandleIcon = (TransitionDrawable) mHandleView.getDrawable();
       //mHandleIcon.setCrossFadeEnabled(true);

//author:jezz
main_apps=(RelativeLayout)dragLayer.findViewById(R.id.main_apps);
home=(ImageView)dragLayer.findViewById(R.id.all_home);

main_apps.setVisibility(View.GONE);
	mHandleView.setOnClickListener(new OnClickListener() {
	public void onClick(View v) {
		onMainOpened(true);

	}
});
	home.setOnClickListener(new OnClickListener() {
	public void onClick(View v) {
		onMainClosed(true);
	}
});

       /*drawer.lock();
       final DrawerManager drawerManager = new DrawerManager();
       drawer.setOnDrawerOpenListener(drawerManager);
       drawer.setOnDrawerCloseListener(drawerManager);
       drawer.setOnDrawerScrollListener(drawerManager);*/

       grid.setTextFilterEnabled(false);
       grid.setDragger(dragLayer);
       grid.setLauncher(this);

       workspace.setOnLongClickListener(this);
       workspace.setDragger(dragLayer);
       workspace.setLauncher(this);

       deleteZone.setLauncher(this);
       deleteZone.setDragController(dragLayer);
       deleteZone.setHandle(mHandleView);

       dragLayer.setIgnoredDropTarget(grid);
       dragLayer.setDragScoller(workspace);
       dragLayer.setDragListener(deleteZone);
       
       dragLayer.setDockDragListener(dock_view);
       
       dock_view.setWorkspace(workspace);
   }
if (mListener != null) {
    mListener.onDragStart(v, source, dragInfo, dragAction);
}
if(mDockListener!=null){
    mDockListener.onDragStart(v, source, dragInfo, dragAction);
}
以上两个细节地址,还有很多细节都要改,如你的dock区域是不让用户拖入的,所以在底部区别你要创建一个Rect,让这个Rect区域为禁用,再就是有个细节的地方注意:当用户卸载程序的时候你的icon也要跟着一起删除,不过他已经写好了,ApplicationsIntentReceiver,你在其中加下你的删除逻辑就可以了。 

企鹅博客
  • 本文由 发表于 2019年9月29日 06:39:08
  • 转载请务必保留本文链接:https://www.qieseo.com/171793.html

发表评论