画面表示について考える (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);
}
}
}
※関連コンテンツ