[解決済み] pxからdp、dpからpxのアンドロイドの計算式
2022-05-03 23:45:22
質問
密度独立ピクセルに対する可変ピクセル量、またはその逆の計算をしようとしています。
この式
(px to dp): dp = (int)(px / (displayMetrics.densityDpi / 160));
はゼロで割るため、小型端末では動作しません。
これは、私のdp to pxの計算式です。
px = (int)(dp * (displayMetrics.densityDpi / 160));
どなたか、ご指摘をお願いします。
どのように解決するのですか?
注:上記で広く使われている解決策は
displayMetrics.density
. しかし、ドキュメントには、この値はスクリーンの「バケット」で使用される丸められた値であると説明されています。例えば、私のNexus 10では、実際の値は298dpi (real) / 160dpi (default) = 1.8625 であるところ、2が返されました。
要件によっては、正確な変換が必要な場合もありますが、その場合は次のようにします。
[編集] これはAndroidの内部dpユニットと混用するためのものではありません。なぜなら、これはもちろんまだスクリーンバケットに基づいているからです。異なるデバイスで同じ実サイズをレンダリングするユニットが必要な場合に使用します。
dpをpixelに変換します。
public int dpToPx(int dp) {
DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();
return Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
}
pixelをdpに変換する。
public int pxToDp(int px) {
DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();
return Math.round(px / (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
}
xdpiとydpiのプロパティがあるので、区別したいかもしれませんが、これらの値が大きく異なるようなまともなディスプレイは想像できませんので注意してください。
関連
-
エラータイプ 3 タイプエラー, Error: アクティビティクラス{}が存在しません。アクティビティ起動時のエラー 解決方法
-
view.getRootView()の本当の意味とテストについて
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み] AndroidでPythonを実行する方法はありますか?
-
[解決済み] AndroidのListViewで画像を遅延ロードする方法
-
[解決済み] EclipseのAndroidプラグインで "Debug certificate expired "エラーが発生する。
-
[解決済み] Androidで画面の大きさをピクセル単位で取得する方法
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
AAPT2エラーについて:詳しくはログをご確認ください。
-
gitlab 設定エラー。リモートリポジトリから読み込めなかったか、ホストキーの検証に失敗しました。
-
cygwinのダウンロード、インストールチュートリアル、およびCDTの「makeプログラムがパスに見つからない」バグの解消
-
デフォルトのアクティビティが見つからない場合の対処法
-
アプリはGoogle検索でインデックスされません Androidmanifestのクソみたいな黄色い警告
-
ActivityはOnFragmentInteractionListenerを実装しなければならないに関する質問
-
JVMのエラーに遭遇しました。Java Runtime Environmentによって致命的なエラーが検出されました。
-
view.getRootView()の本当の意味とテストについて
-
Androidのカラーグラデーション実装のまとめ
-
Android studio 制約レイアウト ConstraintLayout