画面サイズを取得するには(AndroidMode編)

◆PROCESSING 逆引きリファレンス

 カテゴリー:スマホ(AndroidMode)

画面サイズを取得するには(AndroidMode編)

【概要】

PROCESSINGにAndroidMode を導入する事で、PROCESSINGで開発したプログラムをAndroid端末上で動かす事ができるようになります。

AndroidModeの導入については「PROCESSINGをAndroid端末で動かすには(4.0版)」記事を参照してください。

自分の端末の画面サイズを得るには、PROCESSINGの命令を使う方法と、Androidの命令を使う方法があります。

Androidの画面は、以下のようになっていますが、どのサイズが取得できるかは、利用する命令によって異なります。

名称 説明
Status Bar 画面上部にある表示エリア
Navigation Bar 画面下部にある表示エリア。機種によりソフトウェアボタンの場合とHWボタンの場合がある
Real Size Status Bar、Navigation Bar を含む全画面サイズ
Display Size Navigation Bar を除く画面サイズ

以下はAndroidModeで画面サイズを取得する代表的な方法です。

PROCESSINGの命令

  • グローバル変数を使う
  • PAppletのメソッドを利用する
  • PSurfeceから取得する

Androidの命令

  • Display クラスを利用する
  • DisplayMetrics クラスを利用する

なおこの先の説明は、フルスクリーン状態を前提としたものとなっています。size() 命令を使う場合は、得られる値が異なるものになるため、以下の説明は適切ではありません。

画面サイズを得る方法がたくさんあるので、どれを使おうか迷う所ですが、仮に  setup() 関数の中から使うのであれば

目的 利用する命令
Real Size がほしい PROCESSINGのグローバル変数を使う。
Display Sizeがほしい AndroidのDisplayクラスを利用する。
Status Bar の大きさが知りたい PROCESSINGのPSurfeceを利用する。
Navigation Bar の大きさが知りたい AndroidのDisplayクラスを利用する。
settings()関数の中で使いたい PROCESSINGのグローバル変数(displayWidth、displayHeight)を使うか、AndroidのDisplayMetrics クラスを、Resources経由で取得して利用する。

のが良いのではないかと思います。

 

【詳細】

PROCESSINGの命令で取得する

グローバル変数int width ;
int height ;
int displayWidth ;
int displayHeight;

settings() 関数の中で利用した場合、displayWidth と displayHeight は Display Size を返却します。

widthとheightは setup() 関数の中か、それ以降の処理の中で利用してください。settings() 関数の中で利用すると -1 が戻るので、注意が必要です。

setup() 関数以降で利用した場合、全ての変数は Real Size を返却します。

displayWidth と displayHeight は、Navigation Bar をソフトウェアで表示している端末の場合、使う場所により返却する値が異なるので注意してください。

 

PAppletのメソッドを利用するint wd = sketchWidth ( ) ;
int ht = sketchHeight ( ) ;

wd : 画面の幅
ht : 画面の高さ

この命令は、Real Size を返却します。

この命令は  setup() 関数の中か、それ以降の処理の中で利用してください。settings() 関数の中で利用すると -1 が戻るので、注意が必要です。

 

 

PSurfeceから取得する1View v = getSurface() . getRootView( ) ;
int wd = v . getWidth( ) ;
int ht = v . getHeight( ) ;
PSurfeceから取得する2Rect r = getSurface() . getVisibleFrame( ) ;
int wd = r . width( ) ;
int ht = r . height( ) ;
v : PSurface がもつ大元のView
r : PSurface の表示フレーム領域情報
wd : 画面の幅
ht : 画面の高さ

getSurface() は  setup() 関数の中か、それ以降の処理の中で利用してください。settings() 関数の中で利用すると 例外エラーとなるので、注意が必要です。

getRootView() で得られる View からは、Real Size が得られます。

getVisibleFrame() を setup() 関数で利用した場合、Real Size からStatus Barを除いたサイズが得られます(つまり、Status Bar のサイズがわかります!)。

またgetVisibleFrame() を draw() 関数以降で利用した場合は Real Size が戻ってきます。

 

Androidの命令で取得する

Display クラスを利用するWindowManager wmng  =  act . getWindowManager ( ) ;
Display display = wmng . getDefaultDisplay ( ) ;
void display . getSize ( Point size ) ;
void display . getRealSize( Point size );

act : Activity クラスのインスタンス変数
wmng : WindowManager クラスのインスタンス変数
display : Displayクラスのインスタンス変数
size : Pointクラスのインスタンス変数

getSize() は Display Size を戻します。また getRealSize() は Real Size を戻します。

Display クラスのインスタンスを得る getWindowManager  命令は Activity クラスのメソッドですので、これらの命令は settings() 関数の中では利用できません。

 

DisplayMetrics クラスを利用する1WindowManager wmng  =  act . getWindowManager ( ) ;
Display display = wmng . getDefaultDisplay ( ) ;
void display . getMetrics( DisplayMetrics dm);
int wd = dm . widthPixels ;
int ht = dm . heightPixels ;
DisplayMetrics クラスを利用する2Resources res = Resources . getSystem () ;
DisplayMetrics dm = res . getDisplayMetrics () ;
int wd = dm . widthPixels ;
int ht = dm . heightPixels ;

act : Activity クラスのインスタンス変数
wmng : WindowManager クラスのインスタンス変数
res : Resources クラスのインスタンス変数
dm : DisplayMetrics クラスのインスタンス変数
wd : 画面の幅
ht : 画面の高さ

DisplayMetrics からは 、DIsplay Size が得られます。

Activity クラスの getWindowManager 経由でDisplayMetricsを得る方法は、settings() 関数の中では利用できません。

settings() 関数の中でサイズを取得したい場合は、Resourcesクラスの getSystem 経由で得られる DisplayMetrics を利用してください。

 

その他

Androidの命令について詳しく知りたい方は、下記公式サイトも参照してください。

 

【関連記事】

 


サンプルプログラム

PROCESSINGの命令で取得する例:

PROCESSINGがもつグローバル変数とPSurfaceクラスから、画面サイズを取得して表示しています。

<出力サンプル>

 

Androidの命令で取得する例:

Androidの命令を利用して画面サイズを得ています。

<出力サンプル>


PROCESSING逆引きリファレンス一覧 へ戻る

本ページで利用しているアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。