触控版界面Touchwiz未调用onOffsetsChanged函数

9

注意:由于这是一个关于三星的问题,我也在他们的开发者论坛上提出了这个问题。

我正在Android中实现一个动态壁纸,并且我正在监听我的墙纸引擎中的onOffsetsChanged()方法,在用户通过主屏幕滑动时更改壁纸。这在我的私人Galaxy Tab上使用CM9定制rom非常好用。但是在公司设备上,即标准的Galaxy S3上,它不起作用。不知何故,Touchwiz在主屏幕更改时不会调用onOffsetsChanged。

在谷歌上搜索这个主题除了这个应用的描述之外没有任何重要的结果,其中开发者声明:“修复了最新的TouchWiz启动程序上的滚动问题,onOffsetsChanged()不会被调用。”现在我只想联系开发者,但不幸的是它也是三星应用程序。

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


我看到很多人在互联网上抱怨这个问题。我相信三星公司有他们的考虑,但不管是什么,我认为这是一个错误的步骤。在我的LWPs中,我通常会在描述中放置一条注释,建议S3用户使用Go Launcher(以解决此问题)。我从未找到过一个像样的解决方法,如果你有,请告诉我们。我真的希望三星能在下一款手机上修复这个问题。 - Rodrigo Dias
但是在s3中滚动是有效的。 - moDev
1个回答

7
一些开发者正在使用触摸事件而非系统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
        }
    }
}

这段代码只是一个示例。请注意,使用“==”比较浮点数是不正确的,但在这种情况下可能会起作用。

另外,三星视差LWP的工作方式似乎也是相同的。如果您拥有一个带有TouchWiz和其他正常工作的启动器(可以正常发送onOffsetsChanged())的设备,您可以自己试试:

1)首先在TouchWiz上设置视差LWP,并查看它仅依赖于onTouchEvent()
2)将启动器更改为其他启动器。查看LWP现在依赖于onOffsetsChanged()
3)再次将启动器更改为TouchWiz,并查看左右滑动对于此LWP不再起作用。

因此,我建议在每个onResume()事件中都将布尔值offsetChangedWorking再次更改为false。这应该可以防止由于启动器更改而导致的此类错误。


嗨!我遇到了同样的问题。如果有人已经实现了这个touchevent方法,你能否在这里粘贴一下? - Swati Rawat
3
我最近遇到了这个问题,并编写了一个方案,可以在TouchWiz启动器上正常工作。请点击这里查看代码。 - Andras K

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