2013年5月19日日曜日

okasize を公開


Android 端末の画面サイズと解像度を入力すると、
Size Group (small / normal / large / xlarge) と
Density Group (ldpi / mdpi / hdpi / xhdpi / xxhdpi) の
どれに属するのかを調べることができる Web アプリです。

こちらで使えます
http://okanoworld.appspot.com/okasize


GitHub でソースコードを公開しています。
MIT ライセンスなのでご自由にお使いください。


計算方法

ユーザからの入力は以下の3つです

  • 画面サイズ inch
  • 解像度 widthPx heightPx

この3つから dpi を計算します。
1 インチあたり、何個のドットが入っているかを調べます。
対角線上のドット数をピタゴラスの定理で求めて、対角線の長さ inch で割ります。
dpi を計算出来れば Density Group の判定ができます。
var dpi = Math.sqrt(widthPx * widthPx + heightPx * heightPx) / inch;

 次に px を dp に変換します。
Size Group を判定するために使う単位は dp です。
px が実際の端末の画面サイズによって相対的に大きさが変わるのに対して、
dp はどんな端末でも物理的に同じ大きさで表示されることが保証されます。
dp については過去の記事を参照してください。
var widthDp = widthPx / (dpi / 160);
var heightDp = heightPx / (dpi / 160);

あとは dpi と dp によってグループ分けをするだけです。
グループわけに使う閾値はいかにまとめられています。

Supporting Multiple Screens - Android Developers
http://developer.android.com/guide/practices/screens_support.html

var density = getDensityCode(dpi);
var size = getSizeCode(widthDp, heightDp);

...

var getDensityCode = function(dpi) {
 var result;
 if(dpi < 120) {
  result = 'ldpi';
 } else if(dpi < 160) {
  result = 'mdpi';
 } else if(dpi < 240) {
  result = 'hdpi';
 } else if(dpi < 320) {
  result = 'xhdpi';
 } else if(dpi < 480) {
  result = 'xxhdpi';
 } else {
  result = 'not matched';
 }
 
 return result;
};

...

var getSizeCode = function(width, height) {
 // 横長にする
 if(width < height) {
  var buf = width;
  width = height;
  height = buf;
 }
 
 var result;
 if(width > 960 && height > 720) {
  result = 'xlarge';
 } else if(width > 640 && height > 480) {
  result = 'large';
 } else if(width > 470 && height > 320) {
  result = 'normal';
 } else if(width > 426 && height > 320) {
  result = 'small';
 } else {
  result = 'not matched';
 }
 
 return result;
};

0 件のコメント:

コメントを投稿