菜单键点击后的布局:
Launcher3_7731\res\layout\overview_panel.xml
壁纸按钮的布局:
Launcher3\src\com\android\launcher3\Launcher.java
对壁纸按钮的响应:
其中:WallpaperSettings.LOCKSCREEN为可以将锁屏壁纸和待机壁纸分开设置的开关
首先看将锁屏壁纸与待机壁纸分开设置:
通过Intent跳到Launcher3\src\com\android\launcher3\WallpaperSettings.java
WallpaperSettings类继承了PreferenceActivity并实现了OnPreferenceClickListener接口:
该Activity的onCreate方法内加载了设置壁纸的布局,并通过ActivityManager类来管理接下来的Activity服务:
Launcher3\res\xml\wallpaper_settings.xml
在onPreferenceClick方法中通过Intent启动WallpaperPickerActivity,并依据用户的选择传入参数WallpaperInfo.WALLPAPER_TARGET_ID,
若选择“设置待机壁纸”,则传入
WallpaperInfo.WALLPAPER_TARGET_ID=WallpaperInfo.WALLPAPER_DEFAULT_TYPE
若选择“设置锁屏壁纸”,则传入
WallpaperInfo.WALLPAPER_TARGET_ID=WallpaperInfo.WALLPAPER_LOCKSCREEN_TYPE
若选择“设置待机壁纸”,则传入
WallpaperInfo.WALLPAPER_TARGET_ID=WallpaperInfo.WALLPAPER_ALL_TYPE
进入Launcher3\src\com\android\launcher3\WallpaperPickerActivity.java
WallpaperPickerActivity继承(à)WallpaperCropActivity继承(à)Activity
先看WallpaperCropActivity.java
Launcher3\src\com\android\launcher3\WallpaperCropActivity.java
WallpaperCropActivity.java完成的具体功能有:
(1) 剪切壁纸大小
(2) 设置壁纸
private static final int DEFAULT_COMPRESS_QUALITY = 90;//默认的图片压缩质量
初始化时加载Launcher3\res\layout\wallpaper_cropper.xml布局
Launcher3\res\layout\wallpaper_cropper.xml
这里加载了一个自定义控件:com.android.launcher3.CropView
Launcher3\src\com\android\launcher3\CropView.java
CropView继承(à)TiledImageView继承(à)FrameLayout,是一个自定义的框架布局。
Launcher3\res\layout\actionbar_set_wallpaper.xml
这里加载了一个自定义的按钮控件:com.android.launcher3.AlphaDisableableButton
Launcher3\src\com\android\launcher3\AlphaDisableableButton.java里定义了该按钮的属性。
WallpaperPickerActivity.java
里面也有一个init()函数,覆盖了WallpaperCropActivity.java里面的init()函数.
WallpaperPickerActivity类里的init()函数解析:
(1)加载Launcher3\res\layout\wallpaper_picker.xml布局,有自定义控件:
com.android.launcher3.WallpaperRootView
Launcher3_7731\src\com\android\launcher3\WallpaperRootView.java中,
WallpaperRootView继承自RelativeLayout,是一个自定义的相对布局。
wallpaper_picker.xml里面用3个LinearLayout分别显示静态壁纸、动态壁纸和第三方壁纸