Thr*_*bad 9 android live-wallpaper
注意:由于这是三星特有的问题,我也在开发板上问过它.
我目前正在Android中实现动态壁纸,我正在我的壁纸引擎中听取onOffsetsChanged()方法,以便在用户刷过主屏幕时更改壁纸.这在我的私有Galaxy Tab上使用CM9自定义ROM很有效.在我的公司设备上,一个股票Galaxy S3,它不起作用.不知何故,当主屏幕改变时,Touchwiz不会调用onOffsetsChanged.
谷歌搜索该主题并没有产生任何重大的结果,除了这个应用程序的描述,其中开发人员声明:"修复了最新的TouchWiz启动器滚动,其中onOffsetsChanged()没有被调用." 现在我只是联系开发者,但不幸的是它也是一个三星应用程序.
有没有人知道一个解决方法来获得当前的偏移量而不依赖于onOffsetsChanged?有没有人在自己的壁纸中遇到这个问题?有谁知道这是故意还是我可以假设未来的Touchwiz版本会再次使用该方法?
小智 7
一些开发人员使用触摸事件而不是系统onOffsetsChanged()来使用TouchWiz.我认为,目前唯一更好的方法是使用混合事件系统,它将以这种方式工作:
1)始终假设未正确发送onOffsetsChanged()消息(使布尔属性默认为false).
2)这意味着你应该实现onTouch()方法来正确模仿onOffsetsChanged().仅当boolean属性仍为false时才监听onTouch().
3)当调用onOffsetsChanged()时,检查xOffset参数.如果它既不是0.0f也不是0.5f,那么将boolean属性更改为true并仅侦听onOffsetsChanged().
代码将是这样的:
public class myEngine extends WallpaperService.Engine {
private boolean offsetChangedWorking = false;
public void onOffsetsChanged (float xOffset, float yOffset, float xOffsetStep, float yOffsetStep, int xPixelOffset, int yPixelOffset) {
if (offsetChangedWorking == false && xOffset != 0.0f && xOffset != 0.5f) {
offsetChangedWorking = true;
}
if (offsetChangedWorking == true) {
// Do sth here
}
}
public void onTouchEvent(MotionEvent paramMotionEvent) {
if (offsetChangedWorking == false) {
// Do sth else here
}
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码只是一个例子.注意,将浮点数与==进行比较是不正确的,但在这种情况下可能会有效.
此外,看起来三星Parallax LWP的工作方式相同.如果您的设备带有TouchWiz和其他正常工作的启动器(通常会发送onOffsetsChanged()),您可以自己尝试:
1)首先在TouchWiz上设置视差LWP(重要!)并看到它仅依赖于onTouchEvent()
2)将启动器更改为另一个启动器.看到LWP现在依赖于onOffsetsChanged()
3)再次将启动器更改为TouchWiz并看到滑动不再适用于此LWP.
所以我建议添加的是每个onResume()事件再次将boolean offsetChangedWorking更改为false.这应该可以防止启动器更改时出现此类错误.
| 归档时间: |
|
| 查看次数: |
3082 次 |
| 最近记录: |