【发布时间】:2011-03-30 16:43:32
【问题描述】:
我需要我的壁纸在预览模式(带有“设置”和“设置..”的屏幕)下表现不同。我怎么知道它是什么时候画在那里的?
【问题讨论】:
我需要我的壁纸在预览模式(带有“设置”和“设置..”的屏幕)下表现不同。我怎么知道它是什么时候画在那里的?
【问题讨论】:
在onCreateEngine() 中,您可以使用isPreview() 方法。
请注意,onCreateEngine()“通常”被调用两次:一次用于创建预览实例,然后在您实际设置壁纸时再次调用。
详情请看:http://developer.android.com/reference/android/service/wallpaper/WallpaperService.Engine.html
【讨论】:
onCreateEngine() 调用?我问是因为我的偏好更改事件触发了两次。
isPreview()方法可以在实现Engine的onCreate(SurfaceHolder holder)方法中调用。不在onCreateEngine 方法中作为先前的答案,因为该方法尚未准备好。
【讨论】:
我会写除了代表答案。 由于预览版和非预览版引擎实例可以同时存在,您可以在 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。
【讨论】: