久々に開発系の話題。
というか,Splatoon 2 自体ベッチュー #3 で終わりで次は 2 初出の亜種がでるだけなので,まあ盛り上がっていないというかw 最近は BFV ちまちま起動してます。
1. Windows では……
Windows では一般に 25% 刻みのスケーリング設定が可能です。100% が最小値で,250% ぐらい (13.3 inch WQHD+ 3200x1800) は実機で見たことがあります。
カスタムスケーリング設定もできるので,事実上 1% 刻みで設定は可能ですが,そういう設定で運用している人はほぼ 0 と言っていいでしょう。
2. Android では……
Android N (7.0) からユーザーフレンドリーの Display size 設定ができるようになっています。
具体的に,これの DPI 値設定ってどうなるのか知らなかったんです。想像で昔の Android 標準ブラウザーのように 320dp, 360dp, 480dp みたいなキリの良い横幅設定になると思っていたんですよね。
そんなことはなかった。
ソースコードを参照していると,そんなことはないようです。
まず,デフォルト値を元に算出するようです。ここでは具体的に Pixel 3 XLで計算していきます。
- デフォルトの density
defaultDensity
: 3.5 - 短辺のピクセル数
minDimensionPx
: 1440 - 最大の density
maxDensity
: 4.5 ← [mdpiのDPI: 160] ×minDimensionPx
÷ [MIN_DIMENSION_DP: 320] - 最大のスケーリング
maxScale
: 1.2857… ← min(1.5,maxDensity
/defaultDensity
) - 最小のスケーリング
minScale
: 0.85 (固定)
まずここまでが基礎の計算となります。短辺が 320dp を下回らないように最大のスケーリング値を決定しているのが特徴です。
小さい方のスケール
小さい方は Small
一つしか生成しないので,強制的に 1.0 → 0.85 の interval 0.15 のみの選択肢となります。
Google Pixel 3 XL は 2.975 つまり 476DPI の設定となります(ああ,3.0 きっちりじゃないんだ……)
大きい方のスケール
大きい方は最大 3 つ (Large, Very Large, Extremely Large) が存在します。
個数の決定としては,max(min(floor((maxScale
- 1) ÷ [MIN_SCALE_INTERVAL: 0.09]), 0), 3) という感じです。
Google Pixel 3 XL では 3 つ生成できます。
そして,interval は 1〜maxScale
に等間隔になるように計算するので,0.09523… となりますね。
まとめ
具体的な生成アルゴリズムは,ソースコードを参照のこと。
Google Pixel 3 XL の例
スケーリング率 | DPI | 解像度 |
---|---|---|
2.975 | 476dpi | 484x995 |
3.5 | 560dpi | 411x846 |
3.825 | 612dpi | 376x774 |
4.1625 | 666dpi | 346x710 |
4.5 | 720dpi | 320x658 |
3. Apple が綺麗すぎて……
iPhone Plus を除くすべてのデバイスで,ダウンスケーリングなしの整数倍を実現しています。
300% スケーリング系と 100%, 200% スケーリング系で基本の仮想ドットサイズが変わるので,実はボタンの大きさは若干違ったりしますがw
個人的には iPhone Plus はダウンスケーリング処理があるので,電話なのに無駄なリソース使ってるのが結構嫌いだったり…… (MacBook Pro もそうですが,ダウンスケーリング処理は結構重たいイメージです。)
iPhone XS Max はそれがなくなったのと,4 inch 端末でないので,買っても良いかな,ってお気持ちになりつつありますw (iPhone SE は画面が残念なんですよね,CMS の面で。最近の端末 [Android も含んで] は CMS も OLED の調整も良くできてて,色がきちんと出ているんですよねー)
The Ultimate Guide To iPhone Resolutions
まとめ
スケーリングは無段階で行われると思って Web サイトを設計した方が良さそうです。
もっときっちりした間隔でスケーリング行われていると思ったのですが,最小スケールはオリジナルの 0.75 倍だと小さくなりすぎると開発時に判断されたようで,オリジナルの 0.85 倍ですし,最大スケールは 320dp を基準に最大 3 つ生成されると言った感じで。
よく Web サイト作成で 320, 375, 414pt みたいな iPhone 系統の情報は出てくるのですが,Android 系はあまり最新の情報が出てこないなーと思ってまして。ただ,実機買うのも嫌だし,みたいなところで (いやまあ,Google Pixel 3 XL は良いなーって思ってるんですけどねw)。
具体的な数値を計算するツール作って色々な解像度でチェックした方がいいかもですね。間違いなく自分は Google Pixel 3 XL 買ったら一番小さい 484x995 で運用すると思うので。
11/22 追記
専用のツールを作りました。320dp を下回る解像度が算出されることもあるようですね。
本文の解説ではビット演算などは省略していますが,この計算ツールではそのあたりも正しくしているので,参考にしてください。なお,2018 冬端末から,Google Pixel 3 基準の 411dp が基本になっている端末が多いようです。