我能否通过编程将壁纸设置为不滚动?

6
我正在编写一个应用程序,允许用户从图片列表中设置手机的壁纸。默认情况下,它在多个主屏幕之间滚动。 我希望主屏幕上的壁纸是静态的非滚动图像。
我可以通过编程实现这一点吗?这是否可能?
我正在使用wallpaperManager.setResource(...);来设置壁纸。
我还尝试了wallpaperManager.setWallpaperOffsetSteps(0,0);,但这并没有解决我的问题。
7个回答

11

我通过以下方式实现了这个功能:

final WallpaperManager wpm = (WallpaperManager)getSystemService(
                Context.WALLPAPER_SERVICE);    
wpm.setWallpaperOffsetSteps(1, 1);
wpm.suggestDesiredDimensions(SCREEN_WIDTH, SCREEN_HEIGHT);

1
这是一种解决方法。在我的测试中,设备旋转或重新启动后,壁纸又开始滚动了。 - Twinsen

4
这由启动器应用程序控制。如果您想要一个不滚动的壁纸,请安装一个不滚动壁纸的启动器应用程序 :)

我能以编程的方式改变动态壁纸吗?你能帮我看一下这个链接吗?https://dev59.com/4WvXa4cB1Zd3GeqPK5th - Naskov

2
如果在设置壁纸时不知道屏幕的宽度和高度,可以参考以下内容(注:此代码使用Kotlin编写)。
 val manager = WallpaperManager.getInstance(context)
 val drawable = manager.builtInDrawable
 manager.setWallpaperOffsetSteps(1F, 1F)
 val height = drawable.intrinsicHeight
 val width = drawable.intrinsicWidth
 val scaledBitmap = Bitmap.createScaledBitmap(bitmap, width, height,true)

2

1

你能试一下吗

final WallpaperManager wpm = (WallpaperManager)getSystemService(
                Context.WALLPAPER_SERVICE);    
wpm.setWallpaperOffsetSteps(1, 1);
wpm.suggestDesiredDimensions(SCREEN_WIDTH, SCREEN_HEIGHT);

1

如果你想要花费一些精力来解决这个问题,你可以创建一个动态壁纸,它显示一个静态的、可供用户选择的图像。然后,如果需要的话,你的壁纸可以覆盖偏移变化。不过,这需要很多工作来停止滚动效果。

另外,你可以在将图像设置为壁纸之前将其裁剪到屏幕大小。这样可以停止滚动,但会破坏屏幕方向的变化。


同意动态壁纸太过了。我尝试在Droid上设置一个适合屏幕大小的壁纸(例如480 x 854)。图像被拉伸(960 x 854)以适应您可以滚动的5个屏幕 - 这是您建议的吗?不确定。谢谢。 - bims
哦,我没有意识到裁剪后的图像会自动拉伸以适应屏幕切换模式。这正是我所建议的。不过,你可能也不想要这个解决方案,因为改变方向会破坏你的图像尺寸。看起来Romain是对的(像往常一样)。 - Josh

1

要极大地减少滚动,只需将位图裁剪为设备屏幕比例,例如9 * 16,并通过壁纸管理器设置此位图,但它仅适用于一种屏幕方向(对于智能手机而言是可以的)。 其他解决方案无效。


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