Android动态壁纸onOffsetsChanged xPixelOffset似乎没有返回真实的像素偏移量

ste*_*ter 5 android live-wallpaper

我正在写一个动态壁纸,我使用的功能:

public void onOffsetsChanged(float xOffset, float yOffset,
            float xOffsetStep, float yOffsetStep, int xPixelOffset,
            int yPixelOffset)
Run Code Online (Sandbox Code Playgroud)

要查看使用情况何时滑动到另一个屏幕,并且我使用xPixelOffset来查看屏幕以像素为单位移动的距离,但是它不会返回我期望的像素数.

对于桌面的5个屏幕中的每个屏幕,它显示像素偏移为0,-80,-160,-240,-320但是我希望它每次都被屏幕宽度偏移(240px而不是80px )

我错过了什么吗?

Jos*_*osh 8

您会注意到,当您滚动时,主屏幕的前景(图标,小部件等)向全屏宽度向左或向右移动,但背景图像(或动态壁纸)仅移动一小部分那个宽度.显而易见的结果是视差滚动效果.

换句话说,端到端你的5个屏幕总共1200px(5 x屏幕宽度),但同一显示器上壁纸的最大宽度类似于480px(2 x屏幕宽度),因为背面不会像前面那样滚动.

因此,偏移不应用于衡量显示器前景移动的距离,而是背景移动的距离.

因此,您仍然可以从offsets参数获取所需的信息.只是你对这些信息的解释必须改变一点.

  • 有用的说明,float xOffset以规范化单位(0.0-1.0)返回偏移量,以便您知道何时达到最大值。 (2认同)