`
dawuafang
  • 浏览: 1104145 次
文章分类
社区版块
存档分类
最新评论

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()方法的调用(有两处)。



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




版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics