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