画面表示について考える (6/6)
作成:2010-06-18 16:38
更新:2010-06-18 16:38
更新:2010-06-18 16:38
■画面に関する情報を調べる
フルスクリーンでゲームなどを作成する場合、注意しなければならないのは「機器によって画面サイズやレゾリューションが異なる」という点でしょう。こうした問題は、画面に関する情報を取得し処理することで対応できます。これは「DisplayMetrics」というオブジェクトを取得することで知ることができます。が、これを取り出すのに一手間かかってしまうので、手順をよく頭に入れて置く必要があるでしょう。
1.WindowManagerの取得
2.Displayの取得
3.DisplayMetricsの用意
4.DisplayMetricsの情報を得る
後は、DisplayMetricsから必要な情報を取り出せばいいだけです。このクラスには、以下のようなフィールドが用意されており、それらの値を取り出して利用できます。
widthPixels――画面の横幅(ピクセル数)
heightPixels――画面の縦幅(ピクセル数)
xdpi――横方向のレゾリューション(DPI)
ydpi――縦方向のレゾリューション(DPI)
density――論理密度(160dpiを基準とした比率)
densityDpi――スクリーン密度(用意された定数で設定)
scaledDensity――スケール密度(用意された定数で設定)
これらの値に応じて表示を調整するようにすれば、画面の大きさやレゾリューションに応じた表示をすることができるようになります。
以下に、簡単なサンプルをあげておきます。起動すると、画面の四隅に同じ大きさの円を表示する例です。画面サイズやレゾリューションが変わっても、ほぼ同じ大きさの円が四隅に表示されます。
1.WindowManagerの取得
WindowManager 変数 = [Activity].getWindowManager();まず最初に行うのは「WindowManager」というクラスを取得することです。これは文字通りウインドウを管理するためのもので、Activityにある「getWindowManager」メソッドで得ることができます。
2.Displayの取得
Display 変数 = [WindowManager].getDefaultDisplay();次に、画面を管理するための「Display」クラスを取得します。これはWindowManagerの「getDefaultDisplay」を使って取り出します。
3.DisplayMetricsの用意
DisplayMetrics 変数 = new DisplayMetrics();準備が整ったところで、DisplayMetricsを用意しましょう。これは、そのままnewでインスタンスを作成します。ただし、この状態では、DisplayMetricsには必要な情報は入っていません。
4.DisplayMetricsの情報を得る
[Display].getMetrics( [DisplayMetrics] );最後に、Displayの「getMetrics」を使い、DisplayMetricsインスタンスに情報を取り出します。このメソッドは、引数に用意したDisplayMetricsインスタンスに必要な情報を設定するものです。これで、DisplayMetricsインスタンスに表示画面の情報が保管されました。
後は、DisplayMetricsから必要な情報を取り出せばいいだけです。このクラスには、以下のようなフィールドが用意されており、それらの値を取り出して利用できます。
widthPixels――画面の横幅(ピクセル数)
heightPixels――画面の縦幅(ピクセル数)
xdpi――横方向のレゾリューション(DPI)
ydpi――縦方向のレゾリューション(DPI)
density――論理密度(160dpiを基準とした比率)
densityDpi――スクリーン密度(用意された定数で設定)
scaledDensity――スケール密度(用意された定数で設定)
これらの値に応じて表示を調整するようにすれば、画面の大きさやレゾリューションに応じた表示をすることができるようになります。
以下に、簡単なサンプルをあげておきます。起動すると、画面の四隅に同じ大きさの円を表示する例です。画面サイズやレゾリューションが変わっても、ほぼ同じ大きさの円が四隅に表示されます。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
package jp.tuyano; import android.app.Activity; import android.content.Context; import android.graphics.*; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.*; public class SampleApp extends Activity { DisplayMetrics metrics; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Window window = getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); this.requestWindowFeature(Window.FEATURE_NO_TITLE); DrawView view = new DrawView(getApplication()); setContentView(view); WindowManager manager = this.getWindowManager(); Display display = manager.getDefaultDisplay(); metrics = new DisplayMetrics(); display.getMetrics(metrics); } class DrawView extends View { public DrawView(Context context) { super(context); } public void onDraw(Canvas c) { int w = metrics.widthPixels; int h = metrics.heightPixels; float d = 100f * metrics.density; c.drawColor(Color.BLACK); Paint fill_paint = new Paint(); fill_paint.setStyle(Paint.Style.FILL); fill_paint.setColor(Color.RED); c.drawOval(new RectF(0f, 0f, d, d), fill_paint); c.drawOval(new RectF(w - d, 0f, (float)w, d), fill_paint); c.drawOval(new RectF(0f, h - d, d, (float)h), fill_paint); c.drawOval(new RectF(w - d, h - d, (float)w, (float)h), fill_paint); } } }
※関連コンテンツ