1

ライブ壁紙を作成しました。ポートレート モードでは正常に動作していますが、携帯電話をランドスケープ モードにすると、ビューが正しく表示されません。今やりたいことは、「ポートレート モードで画面の向きを修正する」ことです。ライブ壁紙でこれを行うにはどうすればよいですか? ビットマップとキャンバスを回転させようとしましたが、見た目が良くありません。キャンバスとビットマップの回転に関するチュートリアルはありますか? 私の問題について提案し、アドバイスしてください。前もって感謝します。

4

1 に答える 1

1

私のコードを見てください:

    public class PonyWallpaper extends AnimationWallpaper {
        /*some code here*/
        class PonyEngine extends AnimationEngine {
        /*some code here as well*/
            @Override
            public void onSurfaceChanged(SurfaceHolder holder, int format,
                    int width, int height) {
                Log.v("orientation changed", "w: "+width + " h: " + height + " width desired: " + this.getDesiredMinimumWidth() + " height desired: " + this.getDesiredMinimumHeight());

AnimationEngine が次のように宣言されている

protected abstract class AnimationEngine extends android.service.wallpaper.WallpaperService.Engine

横から縦に切り替えたときの出力:

向きが変更されました(352): w: 800 h: 480 希望の幅: 960 希望の高さ: 800

ポートレートからランドスケープに切り替えたときの出力:

向きが変更されました(352): w: 480 h: 800 希望の幅: 960 希望の高さ: 800

ご覧のとおり、向きが変わるたびに android.service.wallpaper.WallpaperService.Engine クラスのメソッド onSurfaceChanged が呼び出されます。

私が気づいたことから、

this.getDesiredMinimumWidth()

this.getDesiredMinimumHeight()

幅と高さの可能な最大値です。

私の解決策は次のとおりです。

  • 幅、目的の幅、高さ、目的の高さを引き出しオブジェクトのメソッドに渡す;
  • drawObject() を呼び出す - 座標が 0.0 から 1.0 のようなメソッド。
  • drawer オブジェクト内のこれらの値を、目的の幅と高さによって記述される論理座標にスケーリングします。
  • 渡された xPixelOffset によって判断される実際の x 座標のオフセットを設定します

onOffsetsChanged

方法

android.service.wallpaper.WallpaperService.Engine

  • 実際の高さと希望の高さの差から判断して、実際の y 座標のオフセットを設定します。

それが役立つことを願っています!

于 2012-05-20T20:49:16.813 に答える