当前位置: 代码迷 >> Android >> Android4.4 应用分析——批改Launcher3应用以适应单屏壁纸
  详细解决方案

Android4.4 应用分析——批改Launcher3应用以适应单屏壁纸

热度:513   发布时间:2016-04-28 03:08:21.0
Android4.4 应用分析——修改Launcher3应用以适应单屏壁纸

Launcher3壁纸的规格默认是:壁纸高度=屏幕高度,壁纸宽带=屏幕宽度*2倍

Android4.4的壁纸信息存放在/data/system/users/0/目录下,WallpaperManagerService启动后,会生成如下两个文件在/data/system/users/0/目录下:

    static final String WALLPAPER = "wallpaper";   //设置的壁纸图片,一般为jpeg格式    static final String WALLPAPER_INFO = "wallpaper_info.xml";    //包含墙纸的规格信息:高、宽

Wallpaper_info.xml的解析可以查看WallpaperManagerService的loadSettingsLocked()方法。下面是WallpaperManagerService的启动时序图,不解释了,用的上朋友可以对着查看源码:


下面我们就应该在Launcher3里将壁纸的高、宽信息写入上面说的wallpaper_info.xml文件中(当然时机写入动作还是在Framework中),Launcher3只是将其自身需要的墙纸高、宽写入wallpaper_info.xml你使用Go桌面,那肯定是在Go桌面设置高、宽了。

1. 找对位置后很简单,就是Launcher3的WallpaperCropActivity.java文件getDefaultWallpaperSize()。

    static protected Point getDefaultWallpaperSize(Resources res, WindowManager windowManager) {        Point minDims = new Point();        Point maxDims = new Point();        windowManager.getDefaultDisplay().getCurrentSizeRange(minDims, maxDims);        int maxDim = Math.max(maxDims.x, maxDims.y);        int minDim = Math.max(minDims.x, minDims.y);        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {            Point realSize = new Point();            windowManager.getDefaultDisplay().getRealSize(realSize);            maxDim = Math.max(realSize.x, realSize.y);            minDim = Math.min(realSize.x, realSize.y);        }        // We need to ensure that there is enough extra space in the wallpaper        // for the intended        // parallax effects        final int defaultWidth, defaultHeight;        if (isScreenLarge(res)) {            defaultWidth = (int) (maxDim * wallpaperTravelToScreenWidthRatio(maxDim, minDim));            defaultHeight = maxDim;        } else {            defaultWidth = Math.max((int) (minDim * WALLPAPER_SCREENS_SPAN), maxDim);            defaultHeight = maxDim;        }        return new Point(defaultWidth, defaultHeight);    }

defaultWidth和defaultHeight分别赋值为屏幕的宽、高就行了。


2. cropImageAndSetWallpaper()方法,这个方法应该是设置墙纸时,按墙纸规格裁剪图片用到的,该法与上面一样。


3. 阻止Launcher3滑屏时,滑动墙纸:在Workspace.java中,注释updateOffset()方法的调用(有两处)。



未完待续,有不对的地方,请指正。




  相关解决方案