【问题标题】:Android live wallpaper onOffsetsChanged xPixelOffset doesn't seem to return the real pixel offsetAndroid 动态壁纸 onOffsetsChanged xPixelOffset 似乎没有返回真实的像素偏移量
【发布时间】:2010-07-07 09:51:35
【问题描述】:

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

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

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

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

我错过了什么吗?

【问题讨论】:

    标签: android live-wallpaper


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 是的,但是当我正在编写动态壁纸时,我需要使这种视差效果出现,因为默认情况下壁纸是静态的。所以我想知道用户移动了多少个“屏幕”,并知道最大屏幕数是多少,因为这可能会根据主屏幕或使用动态壁纸的应用程序而改变。
    • 有用说明,float xOffset 以归一化单位(0.0 - 1.0)返回偏移量,以便您知道何时达到最大值。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:
                if(xPixelOffset != 0){
                    myXPixelOffset = xPixelOffset*((backgroundWidth - screenwidth)/screenwidth);
                }
      

      backgroundWidth 应该是 screenHeight*2

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-16
        相关资源
        最近更新 更多