【问题标题】:onOffsetsChanged not called by TouchwizTouchwiz 未调用 onOffsetsChanged
【发布时间】:2013-01-10 12:43:17
【问题描述】:

注意:由于这是三星特有的问题,我也在他们的developer board 上问过。

我目前正在 Android 中实现动态壁纸,并且我正在监听壁纸引擎中的 onOffsetsChanged() 方法,以便在用户滑动主屏幕时更改壁纸。这在我的带有 CM9 自定义 rom 的私人 Galaxy Tab 上效果很好。在我的公司设备上,一个股票 Galaxy S3,它不起作用。当主屏幕改变时,Touchwiz 不会调用 onOffsetsChanged。

除了this app 的描述外,该主题的谷歌搜索没有产生任何显着结果,其中开发人员声明:“修复了最新的 TouchWiz 启动器上的滚动,其中 onOffsetsChanged() 没有被调用。”现在我只想联系开发人员,但不幸的是它也是一个三星应用程序。

有没有人知道在不依赖 onOffsetsChanged 的​​情况下获取当前偏移量的解决方法?有没有人在自己的壁纸中遇到过这个问题?有谁知道这是故意的还是我可以假设未来的 Touchwiz 版本会再次使用该方法?

【问题讨论】:

  • 我看到很多人在网上抱怨这件事。我很确定三星做到这一点是有原因的,但不管是什么,我认为这是一个错误的步骤。在我的 LWP 中,我通常会在为 S3 用户推荐 Go 启动器的描述中添加注释(这解决了问题)。我从来没有找到一个体面的解决方法,如果你这样做,请告诉我们。我真的希望 SAM 在下一个型号上修复它。
  • 但滚动在 s3 中有效

标签: android live-wallpaper


【解决方案1】:

一些开发人员正在使用触摸事件而不是系统 onOffsetsChanged() 来使用 TouchWiz。我认为,目前唯一更好的方法是使用混合事件系统,它将以这种方式工作:

1) 始终假定 onOffsetsChanged() 消息未正确发送(使布尔属性默认为 false)。
2) 这意味着您应该实现onTouch() 方法来正确模仿 onOffsetsChanged()。仅当布尔属性仍为 false 时才侦听 onTouch()。
3) 调用 onOffsetsChanged() 时,请检查 xOffset 参数。如果既不是 0.0f 也不是 0.5f,则将布尔属性更改为 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
        }
    }
}

此代码只是一个说明。请注意,将浮点数与 == 进行比较是不正确的,但在这种情况下可能会起作用。

此外,三星 Parallax LWP 的工作方式似乎相同。如果您的设备带有 TouchWiz 和其他一些正常工作的启动器(正常发送 onOffsetsChanged()),您可以自己尝试:

1) 首先在 TouchWiz 上设置视差 LWP(很重要!),看看它只依赖于 onTouchEvent()
2)将启动器更改为另一个。看到 LWP 现在依赖 onOffsetsChanged()
3) 再次将启动器更改为 TouchWiz,然后看到滑动不再适用于此 LWP。

所以我建议添加的是在每个 onResume() 事件上将布尔 offsetChangedWorking 再次更改为 false。这应该可以防止启动器更改出现此类错误。

【讨论】:

  • 非常感谢您的详细回复
  • 嗨!我遇到了同样的问题。如果有人为此实现了 touchevent 方法,请在此处粘贴。
  • 我最近遇到了这个问题,并编写了一个可以与 TouchWiz 启动器配合使用的解决方案。见代码here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-05
  • 1970-01-01
相关资源
最近更新 更多