1

画面の向きのロジックに本当にこだわっています。

これが私のコードです:

@Override
public EngineOptions onCreateEngineOptions() {
        this.cameraWidth = getResources().getDisplayMetrics().widthPixels;
        this.cameraHeight = getResources().getDisplayMetrics().heightPixels;
        this.camera = CameraFactory.createPixelPerfectCamera(this, this.cameraWidth / 2.0F, this.cameraHeight / 2.0F);
        this.camera.setResizeOnSurfaceSizeChanged(true);
        this.dpi = getResources().getDisplayMetrics().densityDpi;

        Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
        int rotation = display.getRotation();
        if (rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270) {
                screenOrientation = ScreenOrientation.LANDSCAPE_SENSOR;
        } else {
                screenOrientation = ScreenOrientation.PORTRAIT_SENSOR;
        }

        EngineOptions engineOptions = new EngineOptions(true,screenOrientation, new FillResolutionPolicy(), this.camera);
        engineOptions.getAudioOptions().setNeedsSound(true);
        return engineOptions;
}

@Override
public void onSurfaceChanged(final GLState pGLState, final int pWidth, final int pHeight) {
        super.onSurfaceChanged(pGLState, pWidth, pHeight);

        Log.i(TAG, "onSurfaceChanged " + "w: " + this.camera.getSurfaceWidth() + " h: " + this.camera.getSurfaceHeight());

        this.cameraWidth = this.camera.getSurfaceWidth();
        this.cameraHeight = this.camera.getSurfaceHeight();
        this.camera.setCenter(this.cameraWidth / 2.0F, this.cameraHeight / 2.0F);

}

LWP を AVD 3.7 FWVGA スライダー 480x854 で試してみると、すべて正常に動作しますが、LWP プレビュー モードでのみ動作します。たとえば、ランドスケープ LWP プレビュー モードから [壁紙の設定] ボタンを押すと、LWP がデスクトップの残りの半分に移動して半分黒い画面が表示されます。

また、Previos モードからデスクトップに戻るときに onCreateEngineOptions メソッドが呼び出されないことに気付きました。

また、LWP で onSurfaceChanged イベントを正しく受け取るたびに。また、画面の向きの変更イベントを構成して処理できます...しかし、それを私のロジックに適用するにはどうすればよいですか?

public BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent myIntent) {

        if (myIntent.getAction().equals(BROADCAST_CONFIGURATION_CHANGED)) {

            Log.d(TAG, "received->" + BROADCAST_CONFIGURATION_CHANGED);

            if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
                Log.i(TAG, "LANDSCAPE_SENSOR");
            } else {
                Log.i(TAG, "PORTRAIT_SENSOR");
            }
        }
    }
}

ポートレートとランドスケープの両方のモードを処理するように LWP を正しくセットアップする方法は?

前もって感謝します!

4

1 に答える 1

1

私はゲームで同様の問題を抱えています。マニフェスト ファイルの各アクティビティの次の行で問題を修正します。

  <activity
        ....
        android:configChanges="orientation"
        ... />

メソッドを使用します。

        @Override
public void onResumeGame() {
super.onResumeGame();

}

@Override
public void onPauseGame() {
super.onPauseGame();

}

問題が解決することを願っています。よろしくお願いします。

于 2012-12-19T03:08:39.370 に答える