我正在创建一个墙纸应用程序,其中有一个选项可以将图像设置为墙纸,但是图像的尺寸大于设备尺寸,因此我想将其设置为墙纸,并且应在整个设备屏幕上伸展而不拉伸,裁切和扭曲图像。我正在使用毕加索。代码已随附。
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
Log.d("TAG", "onBitmapLoaded: ");
ContentResolver r = contentResolverWeakReference.get();
AlertDialog dialog = alertDialogWeakReference.get();
WallpaperManager wallpaperManager = WallpaperManager.getInstance(context);
try {
//centerCropWallpaper(bitmap,wallpaperManager.getDesiredMinimumWidth(),wallpaperManager.getDesiredMinimumHeight())
wallpaperManager.setBitmap(bitmap);
} catch (IOException ex) {
ex.printStackTrace();
}
if (dialog.isShowing()) {
dialog.dismiss();
}
Snackbar.make(view, "Image Set as Wallpaper", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
我也尝试了中心裁切,但是由于裁切了图像区域,因此没有成功。中心裁剪的代码附在下面
private Bitmap centerCropWallpaper(Bitmap wallpaper, int desiredWidth, int desiredHeight){
Display display = ((Activity)context).getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
//int width = size.x;
int height = size.y;
float scale = (float) desiredHeight / wallpaper.getHeight();
int scaledWidth = (int) (scale * wallpaper.getWidth());
int deviceWidth = size.x;
int imageCenterWidth = scaledWidth /2;
int widthToCut = imageCenterWidth - deviceWidth / 2;
int leftWidth = scaledWidth - widthToCut;
Bitmap scaledWallpaper = Bitmap.createScaledBitmap(wallpaper, size.x, size.y, false);
// Bitmap croppedWallpaper = Bitmap.createBitmap(
// scaledWallpaper,
// widthToCut,
// 0,
// leftWidth,
// desiredHeight
// );
return scaledWallpaper;
}
我正在使用的图像大小是1440 x 2560