其他分享
首页 > 其他分享> > android – onOffsetsChanged没有被Touchwiz调用

android – onOffsetsChanged没有被Touchwiz调用

作者:互联网

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

我目前正在Android中实现动态壁纸,我正在我的壁纸引擎中听取onOffsetsChanged()方法,以便在用户刷过主屏幕时更改壁纸.这在我的私有Galaxy Tab上使用CM9自定义ROM很有效.在我的公司设备上,一个股票Galaxy S3,它不起作用.不知何故,当主屏幕发生变化时,Touchwiz不会调用onOffsetsChanged.

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

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

解决方法:

一些开发人员使用触摸事件而不是系统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
        }
    }
}

这段代码只是一个例子.注意,将浮点数与==进行比较是不正确的,但在这种情况下可能会有效.

此外,看起来三星Parallax LWP的工作方式相同.如果您的设备带有TouchWiz和其他正常工作的启动器(通常会发送onOffsetsChanged()),您可以自己尝试:

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

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

标签:live-wallpaper,android
来源: https://codeday.me/bug/20190930/1836379.html