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