路径:
\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