【问题标题】:Can I programmatically set a wallpaper to not scroll?我可以以编程方式将壁纸设置为不滚动吗?
【发布时间】:2010-10-01 16:50:35
【问题描述】:

我正在编写一个应用程序,允许用户从图片列表中设置手机的壁纸。 默认情况下,它会在多个主屏幕上滚动。我希望主屏幕上的壁纸是静态非滚动图像。

我能以编程方式做些什么来实现这一点?这甚至可能吗?

我正在使用wallpaperManager.setResource(...); 设置壁纸。

我也尝试过wallpaperManager.setWallpaperOffsetSteps(0,0);,但这并没有解决我的问题。

【问题讨论】:

    标签: android


    【解决方案1】:

    如果您在设置壁纸时不知道屏幕宽度和屏幕高度,这可能会有所帮助(PS 它在 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】:

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

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

      【讨论】:

      • 这是一种解决方法。在我的测试中,壁纸在设备旋转或重启后再次开始滚动。
      【解决方案3】:

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

      【讨论】:

      【解决方案4】:

      通常 ImageWallpaper 的大小设置为比显示器的宽度宽一倍,因此当您向左或向右滚动主页时​​,ImageWallpaper 会处理 offsetchange 事件。

      我没有尝试过,但我认为它可能会起作用。你可以试试这个:[suggestDesiredDimensions]:http://developer.android.com/reference/android/app/WallpaperManager.html#suggestDesiredDimensions(int, int)

      将尺寸设置为与工作区的宽度相同。

      【讨论】:

        【解决方案5】:

        如果您想为解决方案付出一些努力,您可以创建一个动态壁纸来显示静态的、用户可选择的图像。然后,如果需要,您的墙纸可以覆盖偏移更改。不过,要停止滚动效果需要做很多工作。

        或者,您可以将图像裁剪为屏幕大小,然后再将其设置为墙纸。这会停止滚动,但会破坏屏幕方向的变化。

        【讨论】:

        • 同意动态壁纸太多了。我尝试在 Droid 上设置适合屏幕大小的壁纸(例如 480 x 854)。图像被拉伸(960 x 854)以适应您可以滚动的 5 个屏幕 - 这是您的建议吗?没有把握。谢谢
        • 哦,我没有意识到裁剪后的图像会自动拉伸以适应屏幕切换模型。这就是我的建议。不过,您可能也不想要这个解决方案,因为改变方向会弄乱您的图像尺寸。看起来 Romain 拥有它的权利(像往常一样)。
        【解决方案6】:

        你可以试试

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

        【讨论】:

          【解决方案7】:

          为了最大限度地减少滚动,只需裁剪一个位图与设备屏幕的比例,例如 9*16 并通过壁纸管理器设置此位图,但它适用于一个屏幕方向(智能手机可以)。 其他解决方案不起作用。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-10-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多