代码之家  ›  专栏  ›  技术社区  ›  stealthcopter

Android live墙纸onoffsetchanged xPixelOffset似乎没有返回真正的像素偏移

  •  5
  • stealthcopter  · 技术社区  · 14 年前

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

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

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

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

    3 回复  |  直到 13 年前
        1
  •  8
  •   Josh    14 年前

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

    换言之,端到端你的5个屏幕总共像1200px(5倍屏幕宽度),但在同一个显示器上壁纸的最大宽度是480px(2倍屏幕宽度),因为背面没有前面滚动那么多。

    所以你仍然可以从offsets参数得到你需要的信息。只是你对这些信息的理解必须有所改变。

        2
  •  2
  •   Dave    13 年前

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

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

        3
  •  0
  •   ranko85gmx    12 年前
              if(xPixelOffset != 0){
                  myXPixelOffset = xPixelOffset*((backgroundWidth - screenwidth)/screenwidth);
              }
    

    背景宽度应为屏幕高度*2