and roid単位変換(TypedValue)


Androidの単位転換
記事のリンク:http://blog.csdn.net/qq_16628781/articale/detail/68939039
知識のポイント
  • dip/dpiとAndroid画面の説明.
  • dp回転dx/dx回転dpの例.
  • TypedValueは単位変換及び例を行う.
  • 新名詞記録{TypedValue:Android自体が提供する単位変換クラス;DP/DIP/DX画面単位換算;
  • 概要
    今、Androidの破片化は本当に見るに耐えられないので、Googleは新しいバージョンの中で、次第に権限を強化して、Androidの“江湖”を統一します.ですから、私たちが開発をするには、適応が必要です.まず、画面単位の知識を理解します.
    dipはピクセル密度ではなく、ピクセル密度はdpiであり、引用文の原語dip:device independent pixels(設備の独立ピクセル).設備によって異なる表示効果があります.pxはピクセルです.pxを使うと、実際のピクセルで描きます.例えば、長さ240 pxの横線を描きます.480幅のシミュレータでは半分のスクリーン幅です.320幅のシミュレータでは2/3のスクリーン幅です.dipとは、スクリーンの高さを480点、幅を320点に分けることです./** * dp px( ) * * @param context * @param dpValue */ public static int dip2px(Context context, float dpValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f); } /** * px( ) dp * * @param context * @param pxValue */ public static int px2dip(Context context, float pxValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f); } /** * px sp , * * @param pxValue * @param fontScale * (DisplayMetrics scaledDensity) * @return */ public static int px2sp(Context context, float pxValue) { final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (pxValue / fontScale + 0.5f); } /** * sp px , * * @param spValue * @param fontScale * (DisplayMetrics scaledDensity) * @return */ public static int sp2px(Context context, float spValue) { final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (spValue * fontScale + 0.5f); }
  • 1
  • ,
  • 4
  • 5
  • ,
  • ,
  • 8
  • 9,
  • 10
  • 11
  • 15
  • ,
  • ,
  • ,
  • ,
  • ,
  • 23
  • ,
  • ,
  • 30,
  • 31
  • ,
  • 34,
  • ,
  • ,
  • ,
  • 38,
  • 40,
  • ,
  • ,
  • ,
  • ,
  • 46
  • ,
  • もう一つの変換方式:TypedValue類
    実はAndroidでも単位転換の関数が提供されています.それはTypedValue類です.
    TypedValue:このクラスはツールクラスです.ダイナミックコンテナとして、データ値をいくつか預けています.これらの値は主にresourceの値です.TypedValue類は対応する値を実際のスクリーン上のポイント値、つまりピクセル値に変換します.
    具体的な使い方は以下の通りです.TypedValue.applyDimension(int unit, float value, DisplayMetrics metrics)
  • 1
  • このうち、最初のパラメータはあなたが望む単位で、2番目のパラメータはあなたが望む単位の数値で、3番目のパラメータは表示領域の各種属性値を封入しています.
    例えば、25 spをもらいたいです.それでは、使います.TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 25,context.getResources().getDisplayMetrics())
  • 1
  • つまり、25(2番目のパラメータ)SP(1番目のパラメータ)の現在のデバイスに対応するpx値が欲しいです.
    注意:
    COMPLEX_UNIT_DIP:表示密度density(dpi/160)を掛けます.
    TypedValue.OMPLEX_UNIT_SP:ピクセル密度scaledDensity(=density)を掛けます.
    締め括りをつける
    どの方法を使って単位転換を実現しても、私達はスクリーンの適応のためです.スクリーン適合は「大きな」課題であり、探索と蓄積を続けていく必要があります.決して足を止めてはいけません.励まし合う
    何か問題があったら、すぐに連絡してください.ありがとうございます.