路径:

\LINUX\android\packages\apps\Launcher3\WallpaperPicker\src\com\android\launcher3\WallpaperCropActivity.java

问题引发原因是当前类中的

protected void cropImageAndSetWallpaper(Uri uri,
            BitmapCropTask.OnBitmapCroppedHandler onBitmapCroppedHandler, final boolean finishActivityWhenDone)

方法判断问题,如果在最边缘时候

if (centerCrop) {
    extraSpace = 2f * Math.min(rotatedInSize[0] - cropRect.right, cropRect.left);
} else {
    extraSpace = ltr ? rotatedInSize[0] - cropRect.right : cropRect.left;
}

如果图库移动到最右边时候计算出来的值为0。

 

那么解决方案也很简单,判断好壁纸的宽度,宽度有个取巧的办法:

cropRect.left

判断此值范围即可 如果大于0  就说明有移动,有移动就说明图片大于屏幕宽度,剩下的就是细节处理了。

if (centerCrop) {
    cropRect.left -= extraSpace / 2f;
    cropRect.right += extraSpace / 2f;
} else {
    if (ltr) {
        cropRect.right += extraSpace;
    } else {
        cropRect.left -= extraSpace;
    }
}

//modify start by fanlj@20170208
if(extraSpace == 0){
    if(cropRect.left >= 500){
        cropRect.left -= 300;
    } else if(cropRect.left >= 300){
        cropRect.left -= 200;
    } else if(cropRect.left >= 100){
        cropRect.left -= 100;
    }
}
//modify end by fanlj@20170208

// ADJUST CROP HEIGHT
if (isPortrait) {
    cropRect.bottom = cropRect.top + defaultWallpaperSize.y / cropScale;
} else { // LANDSCAPE

  

 posted on 2017-02-08 14:56  extfff  阅读(428)  评论(0编辑  收藏  举报