ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android – onOffsetsChanged没有被Touchwiz调用

2019-09-30 17:36:31  阅读:217  来源: 互联网

标签:live-wallpaper android


注意:由于这是三星特有的问题,我也在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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有