目录
前言
OverviewMode其实就是长按桌面空白处进去(或按menu键进入)的那个界面,一般也称之编辑模式页面,里面一般包含了壁纸的设置和插件的设置。
初始化
首先说下布局,其布局还是在launcher.xml里,然后上部分显示的是workspace的布局,下面布局则是overview_panel.xml。overview_panel里包含了wallpaper_button,widget_button和settings_button这三个TextView。然后在Launcher.java的setupViews()里初始化这三个view,并设置其对应点击事件,从点击事件的处理方法可以知道,settings_button的事件其实并没有实际的实现,所以这个view一般不显示。
进入/退出OverviewMode
进入/退出OverviewMode分别对应Workspace里的enterOverviewMode和exitOverviewMode方法,这两个方法最终都调用了enableOverviewMode:
private void enableOverviewMode(boolean enable, int snapPage, boolean animated) {
State finalState = Workspace.State.OVERVIEW;
if (!enable) {
finalState = Workspace.State.NORMAL;
}
Animator workspaceAnim = getChangeStateAnimation(finalState, animated, 0, snapPage);
if (workspaceAnim != null) {
onTransitionPrepare();
workspaceAnim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator arg0) {
onTransitionEnd();
}
});
workspaceAnim.start();
}
}
这里通过finalState等参数调用getChangeStateAnimation来获取状态改变的动画对象,然后开始动画。这里Workspace.State.OVERVIEW状态就表示显示的是OverviewMode页面,Workspace.State.NORMAL则显示的是Workspace页面。
壁纸设置
点击widget_button,调用onClickWallpaperPicker方法启动设置壁纸的activity,如下:
protected void onClickWallpaperPicker(View v) {
final Intent pickWallpaper = new Intent(Intent.ACTION_SET_WALLPAPER);
pickWallpaper.setComponent(getWallpaperPickerComponent());
startActivityForRe