1

画面全体を占めるカスタム「キャンバス」ビューを作成する描画アクティビティがあり、ユーザーが描画できるようにします。描画アプリはスケッチパッドの代替品であるため、アクティビティを縦向きにロックする必要があり、ユーザーはパッドを回転させずに描画するために「パッド」を回転させる必要があります。これはもちろん、オプション メニューもその向きにロックされていることを意味し、ユーザーによっては、メニューが上部、下部、または側面から飛び出す可能性があります。オプションメニューを常にユーザーに対して相対的に下部に配置したいと思います...私が検討しているいくつかのオプションと提案や情報をいただければ幸いです:

  1. 必要に応じてメニューが移動するように方向の変更を許可し、SensorManager を使用して方向をリッスンし、キャンバス ビューを手動で回転させて「正しい」方向 (縦) に戻します。キャンバスの回転に遅延が発生する可能性があり、X/Y が入れ替わるため、潜在的に複雑な計算などが発生する可能性があるため、これは見苦しくなります。
  2. 向きの変更を制限し、SensorManager を使用して向きをリッスンし、オプション メニューを手動で下に戻します。これが可能かどうかはわかりません。
  3. 向きをロックし、メニュー ボタンをインターセプトし、管理する必要がある「偽の」オプション メニューを表示するカスタム ビューを作成します。組み込みの OS 機能を置き換える必要はありません。将来的に異なるバージョンの OS に対応するなど。

誰でもこれを処理する方法について何か考えがありますか? #2が可能であればいいのですが、それに関連するものは何も見つかりません。

ありがとう、

ポール

編集:

#2は不可能であることを確認したので、他の誰かがアイデアを持っていない限り、私のオプションは#1、#3だと思いますか?

4

1 に答える 1

0

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

  • アクティビティのAndroidマニフェストで通常の向きの変更を許可します。
  • カスタムの「canvas」ビューコンストラクターで、次の方法で表示情報を取得する追跡フィールドmDisplayを起動します。

コード:

mDisplay = ((WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
  • onDraw()で、表示の回転が0以外のものであるかどうかを確認し、キャンバスを回転して0の回転値に戻します。

コード:

if (mDisplay.getRotation() > 0) {
    canvas.save(Canvas.HAS_ALPHA_LAYER_SAVE_FLAG);
    canvas.rotate(-mDisplay.getRotation(), px, py);
    ...
    do stuff
    ...
    canvas.restore();
}

それが最善の解決策かどうかはわかりませんが、うまくいくようです。

于 2011-03-01T02:08:06.593 に答える