能否像Android自带的应用一样设置壁纸?

4

Android有一种方法可以设置主屏幕壁纸。用户点击“菜单”,然后选择“壁纸”从系统设置壁纸。设置的壁纸图像在竖屏和横屏模式下都可以正确缩放。

我做了一个小应用程序,允许更改主屏幕壁纸。它能正常工作,但我无法找出使图像在设置为壁纸后成为正确尺寸的秘密。

我使用1280x1084的png图像来做这个实验,并尝试了相同大小的320x240图像,但是当它们被设置为主屏幕壁纸时,它们的大小都是相同的。

我寻找了如何像他们一样设置壁纸的教程和示例,但无法找出如何做到。请您给我展示一段代码示例,告诉我这个秘密,使得结果的壁纸可以正确缩放?

我确定一定有一些WallpaperManager设置可以使用,但我不知道该使用哪一个。

提前感谢。

以下是我正在使用的设置壁纸的代码:

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    WallpaperManager myWallpaperManager = WallpaperManager
            .getInstance(getApplicationContext());

    try {
        myWallpaperManager.setResource(R.drawable.kabanight1);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

真诚的问候,Emad


你说的“显示相同大小”是什么意思?是指两张图片彼此大小相等,还是指它们在设置为壁纸之前的大小不变?例如,分别为1280x1024和320x240? - davogotland
当将图像设置为壁纸时,如果它是320x240,则Android会将其扩展到由Android确定的大小,并在其为1280x1024时缩小。我希望Android可以像用户使用“菜单”->“壁纸”方式从提供的系统壁纸中设置壁纸时一样缩放图像。也许在用户运行我的应用程序设置壁纸之前,我的图像文件需要与系统壁纸图像的大小相同? - Emad-ud-deen
1个回答

3

我刚刚看到这个。虽然你可以从Launcher.apk中的壁纸图像观察实际文件大小,但更好的方法是查询WallpaperManager以获取所需大小(与方向无关)。

final WallpaperManager wallpaperManager = WallpaperManager.getInstance(context);
final int fullWidth = wallpaperManager.getDesiredMinimumWidth();
final int fullHeight = wallpaperManager.getDesiredMinimumHeight();

此时,我会创建一个精确所需大小的新位图,并将自己的位图写入其中。关键在于计算填充和缩放,以及考虑状态栏。然而,一旦您将这个正确尺寸的图像作为壁纸写入,它应该与系统壁纸完全相同。
现在的问题是 - 这个图像(尺寸大于屏幕)被正确地缩放了,但您会注意到,根据您的方向,它被裁剪得不同。
如果您想根据方向调整图像大小(以最大化图像的大小但不裁剪它),我认为您需要一个动态壁纸。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接