5

私はライブ壁紙を書いています、そして私は機能を使います:

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

を使用して別の画面にスワイプするタイミングを確認し、xPixelOffsetを使用して画面がピクセル単位で移動した距離を確認しましたが、期待するピクセル数は返されません。

デスクトップの5つの画面のそれぞれについて、ピクセルオフセットが0、-80、-160、-240、-320であることが示されていますが、毎回画面の幅(80pxではなく240px)によってオフセットされると予想されます。 )。

私は何かが足りないのですか?

4

3 に答える 3

8

スクロールすると、ホーム画面の前景 (アイコン、ウィジェットなど) が画面幅いっぱいに左右に移動しますが、背景画像 (またはライブ壁紙) はわずかにしか移動しません。その幅。明らかな結果は、視差スクロール効果です。

別の言い方をすれば、エンド ツー エンドの 5 つの画面の合計は 1200 ピクセル (画面幅の 5 倍) のようになりますが、同じディスプレイ上の壁紙の最大幅は 480 ピクセル (画面幅の 2 倍) のようになります。前ほどスクロールしません。

したがって、オフセットは、ディスプレイの前景がどれだけ移動したかの尺度として使用するのではなく、背景がどれだけ移動したかの尺度として使用する必要があります。

そのため、オフセット パラメーターから必要な情報を引き続き取得できます。その情報の解釈を少し変えなければならないだけです。

于 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 に答える