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

时间:2010-07-07 09:51:36

标签: android live-wallpaper

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

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

要查看使用情况何时滑动到另一个屏幕,我使用xPixelOffset查看屏幕移动了多少像素,但它不会返回我期望的像素数。

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

我错过了什么吗?

3 个答案:

答案 0 :(得分:7)

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

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

然后,偏移量不应用于衡量显示器前景移动的距离,而是用于移动背景的距离。

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

答案 1 :(得分:2)

让你绘制的画布/位图是整个虚拟墙纸的大小(应该有尺寸screenWidth * 2,screenHeight),然后使用xPixelOffset作为x坐标将其绘制到surfaceHolder画布。这是简单的方法。

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

答案 2 :(得分:0)

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

backgroundWidth应该是screenHeight * 2