5

私は現在、非常に集中的で、画面の回転をうまく処理できないライブ壁紙に取り組んでいます。

実際、壁紙は破棄され、onSurfaceChanged を呼び出さずに空白の画面が表示されます。

onSurfaceChanged メソッド内にあるものは次のとおりです。

@Override
    public void onSurfaceChanged(SurfaceHolder holder, int format,
            int width, int height) {
        // TODO Auto-generated method stub
        super.onSurfaceChanged(holder, format, width, height);

        mRatio = (float) width / height;
        if (mRatio > 1) {
            orientation = 0;
        }
        if (mRatio < 1) {
            orientation = 1;
        }
        setRunning(true);
        Log.i(TAG, "Screen Rotation...");
        mHandle.post(r);
    }

ログメッセージがないため、このメソッドが呼び出されないことは確かです。

なぜこれが起こっているのですか?また、画面の回転を処理するためのテクニックは何ですか? 私のライブ壁紙があまりにも集中的で、ボイドを呼び出すことができないのでしょうか?

また、onVisibilityChanged も呼び出されず、エミュレーターでアプリを開くと、ログ メッセージはありません。

@Override
    public void onVisibilityChanged(boolean visible) {
        // TODO Auto-generated method stub
        super.onVisibilityChanged(visible);
        if (visible) {
            setRunning(true);
            Log.i(TAG, "Visible...");
            mHandle.postDelayed(r, 2000);
        } else {
            setRunning(false);
            Log.i(TAG, "Invisible...");
            mHandle.removeCallbacks(r);
        }
    }
4

1 に答える 1

1

マニフェストで、次のように宣言します。

    <activity android:name=".YourActivityName"
              android:configChanges="keyboardHidden|orientation"
    </activity>

-method は、マニフェストで-attributeをonSurfaceChanged宣言した場合にのみ呼び出されconfigChangesます!

あなたの2番目の問題について:onVisibilityChangedあなたが名前から期待するものではありません:

Called when the window containing has change its visibility (between GONE, INVISIBLE, and VISIBLE). Note that this tells you whether or not your window is being made visible to the window manager; this does not tell you whether or not your window is obscured by other windows on the screen, even if it is itself visible.

onPause()とを介して、アプリがユーザーに「表示」されているかどうかを確認する必要がありますonResume()

于 2012-06-17T13:15:22.357 に答える