Launcher3图库壁纸无法跟随移动

本文针对Launcher3中壁纸裁剪活动出现的问题进行了深入分析,并提出了解决方案。当壁纸移动到屏幕最边缘时,通过调整裁剪区域确保壁纸正确显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

路径:

\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

  

转载于:https://www.cnblogs.com/vendor/p/6378217.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值