【问题标题】:Live Wallpaper in preview mode预览模式下的动态壁纸
【发布时间】:2011-03-30 16:43:32
【问题描述】:

我需要我的壁纸在预览模式(带有“设置”和“设置..”的屏幕)下表现不同。我怎么知道它是什么时候画在那里的?

【问题讨论】:

    标签: android live-wallpaper


    【解决方案1】:

    onCreateEngine() 中,您可以使用isPreview() 方法。

    请注意,onCreateEngine()“通常”被调用两次:一次用于创建预览实例,然后在您实际设置壁纸时再次调用。

    详情请看:http://developer.android.com/reference/android/service/wallpaper/WallpaperService.Engine.html

    【讨论】:

    • 只是为了确定,两个引擎是否同时运行,或者是在第一个引擎关闭后的第二个 onCreateEngine() 调用?我问是因为我的偏好更改事件触发了两次。
    • @ruud-lenders 很抱歉回复得这么慢,但我现在已经放弃了编程,并且不经常查看这个网站。我的猜测是第一个在创建第二个之前被销毁,以免消耗双倍的内存等,但这只是一个猜测。也许,如果您仍在这个领域工作,您可以进行调查并添加另一条评论来报告您的发现。此回复已获得 9 票赞成,因此显然这也是其他人面临的问题。祝你好运:-) 乔治
    【解决方案2】:

    isPreview()方法可以在实现Engine的onCreate(SurfaceHolder holder)方法中调用。不在onCreateEngine 方法中作为先前的答案,因为该方法尚未准备好。

    【讨论】:

      【解决方案3】:

      我会写除了代表答案。 由于预览版和非预览版引擎实例可以同时存在,您可以在 WallpaperService 类(Kotlin 中的示例)中添加引擎的两个静态实例和一个局部变量:

          private var engine: OpenGLEngine? = null
          private set
          //...
      
          companion object {
             private var engineInstance: OpenGLEngine? = null
             private var previewEngineInstance: OpenGLEngine? = null
             //...
          }
      

      并在覆盖函数中使用它们

           override fun onCreate(surfaceHolder: SurfaceHolder?) {
              super.onCreate(surfaceHolder)
              if (isPreview) {
                  previewEngineInstance = this@OpenGLEngine
                  engine = previewEngineInstance
              } else {
                  engineInstance = this@OpenGLEngine
                  engine = engineInstance
              }
              //...
          }
      
          override fun onDestroy() {
              if (isPreview) {
                  engine = engineInstance
                  previewEngineInstance = null
              } else {
                  engine = previewEngineInstance
                  engineInstance = null
              }
              //...
              super.onDestroy()
          }
      

      这样,您始终可以在 WallpaperService 中获取当前引擎实例并调用其 isPreview

      【讨论】:

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