WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
Display disp = wm.getDefaultDisplay();
int width = disp.getWidth();
int height = disp.getHeight();
これでディスプレイサイズが出る。
問題はここから。
例えば、実寸値10センチの直線を引きたいなんて場合、
ディスプレイサイズによって当然ピクセル数は変わってくる。
staticに液晶のインチサイズ(対角線)から
ピタゴラスイッチ使って縦横のインチを出して、
センチに変換して、とかやってるのもあったけど、
やっぱりdynamicにやるのがスマートだと思うのでいろいろ調べた。
DisplayMetrics metrics = new DisplayMetrics();
disp.getMetrics(metrics);
んで、
metrics.ydpi; 縦方向のdpiが出るので、
これをインチからセンチに変換=2.54で割れば、
1センチ当たりのピクセル数=ドット数がでる。
問題は、最終的な描画がintなので、
floatからintにキャストするにあたって誤差がでるってこと。
10センチで、約1mmの誤差。
まあそこまで厳密なものは求めてないので、いいっちゃいいんだが。。
でもまあ1%の誤差って結構な誤差だよな、ほんとは。
Display disp = wm.getDefaultDisplay();
int width = disp.getWidth();
int height = disp.getHeight();
これでディスプレイサイズが出る。
問題はここから。
例えば、実寸値10センチの直線を引きたいなんて場合、
ディスプレイサイズによって当然ピクセル数は変わってくる。
staticに液晶のインチサイズ(対角線)から
ピタゴラスイッチ使って縦横のインチを出して、
センチに変換して、とかやってるのもあったけど、
やっぱりdynamicにやるのがスマートだと思うのでいろいろ調べた。
DisplayMetrics metrics = new DisplayMetrics();
disp.getMetrics(metrics);
んで、
metrics.ydpi; 縦方向のdpiが出るので、
これをインチからセンチに変換=2.54で割れば、
1センチ当たりのピクセル数=ドット数がでる。
問題は、最終的な描画がintなので、
floatからintにキャストするにあたって誤差がでるってこと。
10センチで、約1mmの誤差。
まあそこまで厳密なものは求めてないので、いいっちゃいいんだが。。
でもまあ1%の誤差って結構な誤差だよな、ほんとは。