我正在开发一个简单的墙纸应用程序,我有一些图像。它们是可绘制文件夹中的.png文件。
以下是一些代码片段:
WallpaperManager myWallpaperManager = WallpaperManager.getInstance(getApplicationContext());
....
myWallpaperManager.setResource(R.drawable.image1);无论我使用的是什么尺寸或分辨率,当设置好墙纸时,它都会裁剪原始图像。当我使用相同的图像作为背景时,它的大小是正确的,并且显示了整个图像。我认为这可能是我的模拟器的问题,所以我尝试在一个实际的设备(HTC eris)上运行它,我也遇到了同样的问题。我已经使图像的屏幕大小和分辨率为eris,它仍然是裁剪它。然后我把图像做得只有一英寸高,分辨率为100dpi。这是非常像素化的eris,但仍然裁剪图像。
任何帮助都将不胜感激。
我试图添加一些图像来显示之前和之后的图像,但作为一个新用户,我被阻止这样做。
发布于 2012-05-22 04:20:55
检查http://developer.android.com/reference/android/app/WallpaperManager.html#getDesiredMinimumWidth()和http://developer.android.com/reference/android/app/WallpaperManager.html#getDesiredMinimumHeight()返回的值,并尝试使用这些值作为墙纸的尺寸。
发布于 2019-01-28 19:56:12
也许我能帮上忙。
// 1. Get screen size.
DisplayMetrics metrics = new DisplayMetrics();
Display display = getWindowManager().getDefaultDisplay();
display.getMetrics(metrics);
final int screenWidth = metrics.widthPixels;
final int screenHeight = metrics.heightPixels;
// 2. Make the wallpaperManager fit the screen size.
final WallpaperManager wallpaperManager = WallpaperManager.getInstance(ViewWallpaperActivity.this);
wallpaperManager.suggestDesiredDimensions(screenWidth, screenHeight);
// 3. Get the desired size.
final int width = wallpaperManager.getDesiredMinimumWidth();
final int height = wallpaperManager.getDesiredMinimumHeight();
// 4. Scale the wallpaper.
Bitmap bitmap = getBitmap(); // getBitmap(): Get the image to be set as wallpaper.
Bitmap wallpaper = Bitmap.createScaledBitmap(bitmap, width, height, true);
// 5. Set the image as wallpaper.
try {
wallpaperManager.setBitmap(wallpaper);
} catch (IOException e) {
e.printStackTrace();
}请注意,您应该调用suggestDesiredDimensions,然后调用getDesiredMinimumWidth和getDesiredMinimumHeight来获取要缩放到的大小。
发布于 2012-07-13 01:13:02
我也有同样的问题。我制作了一个屏幕大小的图像,并向图像添加填充,使其与WallpaperManager、getDesiredMinimumWidth()和getDesiredMinimumHeight()一样大。
让一些代码自动添加填充似乎更好,这就是我在下面使用的。确保图像与屏幕大小相同。
private void setWallpaper() {
try {
WallpaperManager wallpaperManager = WallpaperManager.getInstance(this);
//import non-scaled bitmap wallpaper
BitmapFactory.Options options = new BitmapFactory.Options();
options.inScaled = false;
Bitmap wallpaper = BitmapFactory.decodeResource(getResources(), R.drawable.wallpaper, options);
if (wallpaperManager.getDesiredMinimumWidth() > wallpaper.getWidth() &&
wallpaperManager.getDesiredMinimumHeight() > wallpaper.getHeight()) {
//add padding to wallpaper so background image scales correctly
int xPadding = Math.max(0, wallpaperManager.getDesiredMinimumWidth() - wallpaper.getWidth()) / 2;
int yPadding = Math.max(0, wallpaperManager.getDesiredMinimumHeight() - wallpaper.getHeight()) / 2;
Bitmap paddedWallpaper = Bitmap.createBitmap(wallpaperManager.getDesiredMinimumWidth(), wallpaperManager.getDesiredMinimumHeight(), Bitmap.Config.ARGB_8888);
int[] pixels = new int[wallpaper.getWidth() * wallpaper.getHeight()];
wallpaper.getPixels(pixels, 0, wallpaper.getWidth(), 0, 0, wallpaper.getWidth(), wallpaper.getHeight());
paddedWallpaper.setPixels(pixels, 0, wallpaper.getWidth(), xPadding, yPadding, wallpaper.getWidth(), wallpaper.getHeight());
wallpaperManager.setBitmap(paddedWallpaper);
} else {
wallpaperManager.setBitmap(wallpaper);
}
} catch (IOException e) {
Log.e(TAG,"failed to set wallpaper");
}
}https://stackoverflow.com/questions/7383361
复制相似问题