总结起来一个lancher包含3个部分内容:应用程序信息采集,事件处理,动画。下面我们来讲述一个自己的launcher的实现过程: 1、设计
从纯用户的角度来设计你的界面,你希望达到什么样的效果,尽量写得详细。尤其是应用程序信息以如何方式的出现,以及对它的操作一般都是一个好设计的亮点。
我们现在设计一个简单的,我们需要一个墙纸,然后在这个墙纸上面有一个条形的控件来显示我们的应用程序图标。选择这些图标以后会在屏幕中间出现一张图表示
这个应用程序的功能,然后单击这个图就会打开这个应用程序。 2、设计的总体实现
针对自己的设想来设计这个lancher的整体实现,如果有无法实现的内容就要及时修改设计,或者换一种设计方案。我们这里使用一个
FrameLayout来作为我们的Lancher的容器。然后分层,最下面一层用来放置可能需要的快捷方式以及我们的
wallpaper,然后在wallpaper层上放一个我们自己定义的component来显示我们的应用程序信息。个人觉得FrameLayout是
比较适合作为lancher的layout的,它类似于photoshop的图层这样的控制,上面的图层会覆盖下面的图层。 3、具体功能的具体实现
这里具体到代码上就是设计各种java功能类了。对于wallpaper和图标的拖拽移动这里简单提一下,更多的可以去看Android
Lancher的实现。wallpaper一般是注册一个broadcastreceiver来处理系统中所有的更改背景图片的请求,而图标的脱拽移动则
涉及到Draglayer这个类。
我们来把重点放在如何取得Android已安装的应用程序信息上。这里就涉及到我们另外一个重要的service了,它就是package
manager,它负责对安装的包进行管理。这里涉及到一些权限,我是直接照着android lancher的实现把它的权限拷贝过来的:
下面来看看具体的实现,我们创建一个自己的控件,使用LinearLayout来装载ImageSwitcher和Gallery两个控件,用
Gallery来显示获得的应用程序信息,用ImageSwitcher来显示应用程序的介绍,单击ImageSwitcher就能打开相应的应用程序。
public class MyLancherSwitcher extends LinearLayout implements
ViewSwitcher.ViewFactory,
AdapterView.OnItemSelectedListener,AdapterView.OnItemClickListener{ ………… mImageSwitcher = new ImageSwitcher(context) ; mGallery = new Gallery(context) ;
this.addView(mImageSwitcher, new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,400)) ; this.addView(mGallery, new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, 80)) ;
final void setActivity(ComponentName className, int launchFlags) { intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); intent.setComponent(className); intent.setFlags(launchFlags); }