预览模式下的动态壁纸

10

当我的壁纸进入预览模式(显示“设置”和“设置...”的屏幕)时,我希望它能表现出不同的功能。如何确定壁纸何时被绘制在该模式下?

3个回答

15

为了确保,这两个引擎是同时运行的,还是第二个 onCreateEngine() 调用是在第一个关闭之后进行的?我问这个问题是因为我的偏好更改事件触发了两次。 - Rudey
@ruud-lenders 很抱歉回复这么慢,但我已经放弃了编程,不经常检查这个网站。 我猜第一个被销毁之前第二个被创建,以免消耗双倍的内存等等,但这只是一个猜测。 如果您仍在这个领域工作,也许可以调查并添加另一条评论以报告您的发现。 这个回复已经得到了九个赞,所以显然其他人也面临这个问题。 无论如何祝你好运 :-) George - George Freeman

5
< p > isPreview() 方法可以在实现的 Engine 的 onCreate(SurfaceHolder holder) 方法中调用。不像前面的答案中的 onCreateEngine 方法,因为该方法还未准备好。< /p >

1

除了已经给出的答案,我还要补充一些内容。由于预览引擎和非预览引擎实例可以同时存在,因此您可以在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 方法。


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