5

我正在写动态壁纸,并使用以下功能:

public void onOffsetsChanged(float xOffset, float yOffset,
            float xOffsetStep, float yOffsetStep, int xPixelOffset,
            int yPixelOffset)

为了查看用户何时滑动到另一个屏幕,我使用 xPixelOffset 来查看屏幕以像素为单位移动了多远,但是它不会返回我期望的像素数。

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

我错过了什么吗?

4

3 回答 3

8

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

换句话说,你的 5 个屏幕的端到端总大小约为 1200 像素(5 倍屏幕宽度),但同一显示器上壁纸的最大宽度约为 480 像素(2 倍屏幕宽度),因为背面不像前面那样滚动。

因此,偏移量不应用作衡量显示器前景移动了多远的量度,而是用于衡量背景移动了多远。

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

于 2010-08-16T18:34:08.127 回答
2

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

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

于 2011-02-07T09:30:26.273 回答
0
          if(xPixelOffset != 0){
              myXPixelOffset = xPixelOffset*((backgroundWidth - screenwidth)/screenwidth);
          }

backgroundWidth 应该是 screenHeight*2

于 2012-12-18T18:46:59.663 回答