Android live壁纸OnOffsetChanged XpixeloOffset不';t似乎返回真实的像素偏移

Android live壁纸OnOffsetChanged XpixeloOffset不';t似乎返回真实的像素偏移,android,live-wallpaper,Android,Live Wallpaper,我正在写一张实时壁纸,我使用以下功能: public void onOffsetsChanged(float xOffset, float yOffset, float xOffsetStep, float yOffsetStep, int xPixelOffset, int yPixelOffset) 我使用xPixelOffset查看屏幕移动的像素数,但它不会返回我期望的像素数 对于桌面的5个屏幕中的每一个,它都显示像素偏移为0,-80,-1

我正在写一张实时壁纸,我使用以下功能:

public void onOffsetsChanged(float xOffset, float yOffset,
            float xOffsetStep, float yOffsetStep, int xPixelOffset,
            int yPixelOffset)
我使用xPixelOffset查看屏幕移动的像素数,但它不会返回我期望的像素数

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


我遗漏了什么吗?

您会注意到,当您滚动时,主屏幕的前景(图标、小部件等)会向左或向右移动全屏宽度,但背景图像(或实时壁纸)只移动该宽度的一小部分。明显的结果是视差滚动效果

换言之,端到端的5个屏幕总计约为1200px(5倍屏幕宽度),但同一显示器上壁纸的最大宽度约为480px(2倍屏幕宽度),因为背面的滚动不如正面

因此,偏移量不应用于测量显示器的前景移动了多远,而应用于测量背景移动了多远


因此,您仍然可以从offsets参数中获得所需的信息。只是您对该信息的解释必须有所改变。

只要将您绘制的画布/位图的大小设置为整个虚拟壁纸的大小(其尺寸应为screenWidth*2,screenHeight),然后使用xPixelOffset作为x坐标将其绘制到surfaceHolder画布上即可。这是最简单的方法

当然,没有法律规定你的虚拟壁纸需要这些尺寸。如果你愿意,它可以以图标的速度滚动。这时,您需要使用xOffset值来计算您自己的像素偏移

          if(xPixelOffset != 0){
              myXPixelOffset = xPixelOffset*((backgroundWidth - screenwidth)/screenwidth);
          }

backgroundWidth应该是screenHeight*2

是的,但是当我在写一张实时壁纸时,我需要使这种松弛效果发生,因为默认情况下壁纸是静态的。因此,我想知道用户移动了多少个“屏幕”,以及屏幕的最大数量是多少,因为这可能会根据主屏幕或使用实时壁纸的应用程序而改变。有用的注意,float xOffset以归一化单位(0.0-1.0)返回偏移量,以便您可以知道何时达到最大值。