android学习之往launcher中添加自定义页面
2014-10-30 10:56
295 查看
最近做了一个开发,往launcher中添加音乐播放器,最开始是做成了一个APK的形式,但最后需要将界面嵌入到launcher中,下面是此过程中的学习记录:
需要将音乐播放单独作为一页,主要要修改launcher模块的两个文件:Launcher.java和Workspace.java,其中Launcher是一个activity,而workspace是布局文件。
在Launcher.java中,主要需要修改以下几个方法 :
(1)onCreate():做相关的初始化的工作;
(2)onResume():因为launcher会经常进入其它页面,当回到launcher的时候会调用onResume方法,laucher模块下面有导航栏,也就是hotseat,尤其是当我们自己添加了自定义的hotseat的时候,当离开launcher又回到launcher的时候就需要做逻辑上的处理,例如:判断当前是哪个页面,应该显示哪个hotseat;
(3)onPause():此方法就是在离开launcher时会调用的方法,可以根据需求增加处理
(4)setWorkspaceBackground:设置launcher界面的背景,主要通过mDragLayer.setBackgroundResource(R.drawable.***),同时可以判断当前页面是哪个页面,然后通过mDragLayer.getBackground().setAlpha(NUM)设置背景的透明度。
(5)bindAddScreens:主要是为launcher添加页面的工作,在这里我们可以处理是否添加自定义页面,而添加页面需要调用workspace的方法(这里需要明白在launcher中添加hotseat是直接在launcher.java中进行处理,但是添加自定义页面还是得在workspace.java中进行处理的)!
(6)showOverviewPanel:点击整理桌面出现屏幕缩略图会调用,这里主要是判断需要显示缩略图的个数处理以及对hotseat的处理。
(7)hideOverviewPanel:当从缩略图回到launcher时会调用的方法,这里需要判断当前是第几页,然后显示相应的hotseat;
(8)init**page:当添加自定义页面的时候在onCreate方法中调用做初始化工作,在此方法中主要是调用mDragLayer.addView方法添加hotseat,然后为workspace提供相应的接口,在此接口中可以处理根据透明度的变化在launcher中做出相应的处理。
在workspace.java中,主要需要修改以下方法:
(1)insertNewWorkspaceScreen:此方法会在早期启动launcher的时候会调用,也就是在launcher添加原始页面的时候会调用,随后如果进入桌面整理然后点击加号添加页面的时候也是会调用的,因为添加页面有个页面下标的问题,所以当得到页面总数的时候需要减去自定义页面的数量。
(2)当滑动页面的时候需要改变透明度,可以在ondraw方法中通过getScrollX得到x的偏移量,然后得到相应的透明度,然后调用相应接口的方法在launcher.java中进度另外的逻辑处理,例如:hotseat的变化
(3)onDrop:在删除页面的时候需要判断当前页面是不是自定义页面,如果是的话就不应该出现在可以删除的页面位置中。
(4)getPageIndicatorMarker:设置launcher界面指示图标,有两种状态,分别是选中和不选中。主要是通过:PageIndicator.PageMarkerResources(R.drawable.weimi_private_icon_focus, R.drawable.weimi_private_icon);来设置的。
(5)insertPageToWorkspaceScreen:在添加自定义页面的时候供launcher.java调用,自定义页的添加步骤如下:
需要将音乐播放单独作为一页,主要要修改launcher模块的两个文件:Launcher.java和Workspace.java,其中Launcher是一个activity,而workspace是布局文件。
在Launcher.java中,主要需要修改以下几个方法 :
(1)onCreate():做相关的初始化的工作;
(2)onResume():因为launcher会经常进入其它页面,当回到launcher的时候会调用onResume方法,laucher模块下面有导航栏,也就是hotseat,尤其是当我们自己添加了自定义的hotseat的时候,当离开launcher又回到launcher的时候就需要做逻辑上的处理,例如:判断当前是哪个页面,应该显示哪个hotseat;
(3)onPause():此方法就是在离开launcher时会调用的方法,可以根据需求增加处理
(4)setWorkspaceBackground:设置launcher界面的背景,主要通过mDragLayer.setBackgroundResource(R.drawable.***),同时可以判断当前页面是哪个页面,然后通过mDragLayer.getBackground().setAlpha(NUM)设置背景的透明度。
(5)bindAddScreens:主要是为launcher添加页面的工作,在这里我们可以处理是否添加自定义页面,而添加页面需要调用workspace的方法(这里需要明白在launcher中添加hotseat是直接在launcher.java中进行处理,但是添加自定义页面还是得在workspace.java中进行处理的)!
(6)showOverviewPanel:点击整理桌面出现屏幕缩略图会调用,这里主要是判断需要显示缩略图的个数处理以及对hotseat的处理。
(7)hideOverviewPanel:当从缩略图回到launcher时会调用的方法,这里需要判断当前是第几页,然后显示相应的hotseat;
(8)init**page:当添加自定义页面的时候在onCreate方法中调用做初始化工作,在此方法中主要是调用mDragLayer.addView方法添加hotseat,然后为workspace提供相应的接口,在此接口中可以处理根据透明度的变化在launcher中做出相应的处理。
在workspace.java中,主要需要修改以下方法:
(1)insertNewWorkspaceScreen:此方法会在早期启动launcher的时候会调用,也就是在launcher添加原始页面的时候会调用,随后如果进入桌面整理然后点击加号添加页面的时候也是会调用的,因为添加页面有个页面下标的问题,所以当得到页面总数的时候需要减去自定义页面的数量。
(2)当滑动页面的时候需要改变透明度,可以在ondraw方法中通过getScrollX得到x的偏移量,然后得到相应的透明度,然后调用相应接口的方法在launcher.java中进度另外的逻辑处理,例如:hotseat的变化
(3)onDrop:在删除页面的时候需要判断当前页面是不是自定义页面,如果是的话就不应该出现在可以删除的页面位置中。
(4)getPageIndicatorMarker:设置launcher界面指示图标,有两种状态,分别是选中和不选中。主要是通过:PageIndicator.PageMarkerResources(R.drawable.weimi_private_icon_focus, R.drawable.weimi_private_icon);来设置的。
(5)insertPageToWorkspaceScreen:在添加自定义页面的时候供launcher.java调用,自定义页的添加步骤如下:
public long insertPageToWorkspaceScreen(long screenId) { if (mWeimiMusicWidgetView == null) { mWeimiMusicWidgetView = new WeimiMusicWidgetView(mLauncher); mLauncher.setWeimiMusicWidgetView(mWeimiMusicWidgetView); setPageSwitchListener(new PageSwitchListener() { public void onPageSwitch(View newPage, int newPageIndex) { if (newPageIndex != getChildCount() - 1) { //mWeimiMusicWidgetView.closeButtonOnClick(); } } }); } if (mMusicCellLayout == null) { mMusicCellLayout = (CellLayout) mLauncher.getLayoutInflater().inflate(R.layout.workspace_screen, null); mMusicCellLayout.setSoundEffectsEnabled(false); mMusicCellLayout.setGridSize(1, 1); mMusicCellLayout.addView(mWeimiMusicWidgetView); } if (mMusicCellLayout.getParent() instanceof Workspace) { removeView(mMusicCellLayout); } mWorkspaceScreens.remove(screenId); mScreenOrder.remove(screenId); mWorkspaceScreens.put(screenId, mMusicCellLayout); mScreenOrder.add(screenId); addView(mMusicCellLayout); return screenId; } <br /> <br /> <p> </p> <pre>
相关文章推荐
- 从Android Launcher源码学习自定义标签
- Android客户端之“微服私访”App的系统学习(五)使用Picasso实现轮播图以及使用自定义View实现个人中心页面
- Android 自定义切换卡功能,通过intent跳转到添加内容页面
- android 数据库 SQLiteOpenHelper和ContentProvider学习笔记---添加数据及显示(一)
- SharePoint(WSS)学习(4) 添加ASPX页面
- Android 自定义组件学习 3
- 说说Android 两种为自定义组件添加属性的使用方法和区别
- android 数据库 SQLiteOpenHelper和ContentProvider学习笔记---添加修改删除数据之联系人(二)
- [导入] 转[教程] 学习如何使用有趣的自定义标记来布局页面!
- Android学习小结(三)——自定义圆角ImageView控件
- Android 自定义组件学习 2
- Android 自定义组件学习 2
- Android之快捷方式二——向Launcher添加快捷方式
- 在布局页面“文章页面中”添加,自定义UserControl
- DotNetNuke系列(一): 如何在DNN中添加自定义的用户注册页面
- Android 自定义组件学习 3
- 页面加入_JS,CSS使用,#include添加文件,缓存页面,页面间传递汉字,IsPostBack控制页面的加载,自定义错语页面
- zen cart 添加自定义页面涉及文件及对应目录
- 说说Android 两种为自定义组件添加属性的使用方法和区别 推荐
- Android 两种为自定义组件添加属性的使用方法和区别