and roid単位変換(TypedValue)
8549 ワード
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点に分けることです. 1 , 4 5 , , 8 9, 10 11 15 , , , , , 23 , , 30, 31 , 34, , , , 38, 40, , , , , 46 , もう一つの変換方式:TypedValue類
実はAndroidでも単位転換の関数が提供されています.それはTypedValue類です.
TypedValue:このクラスはツールクラスです.ダイナミックコンテナとして、データ値をいくつか預けています.これらの値は主にresourceの値です.TypedValue類は対応する値を実際のスクリーン上のポイント値、つまりピクセル値に変換します.
具体的な使い方は以下の通りです. 1 このうち、最初のパラメータはあなたが望む単位で、2番目のパラメータはあなたが望む単位の数値で、3番目のパラメータは表示領域の各種属性値を封入しています.
例えば、25 spをもらいたいです.それでは、使います. 1 つまり、25(2番目のパラメータ)SP(1番目のパラメータ)の現在のデバイスに対応するpx値が欲しいです.
注意:
COMPLEX_UNIT_DIP:表示密度density(dpi/160)を掛けます.
TypedValue.OMPLEX_UNIT_SP:ピクセル密度scaledDensity(=density)を掛けます.
締め括りをつける
どの方法を使って単位転換を実現しても、私達はスクリーンの適応のためです.スクリーン適合は「大きな」課題であり、探索と蓄積を続けていく必要があります.決して足を止めてはいけません.励まし合う
何か問題があったら、すぐに連絡してください.ありがとうございます.
記事のリンク:http://blog.csdn.net/qq_16628781/articale/detail/68939039
知識のポイント
今、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);
}
実はAndroidでも単位転換の関数が提供されています.それはTypedValue類です.
TypedValue:このクラスはツールクラスです.ダイナミックコンテナとして、データ値をいくつか預けています.これらの値は主にresourceの値です.TypedValue類は対応する値を実際のスクリーン上のポイント値、つまりピクセル値に変換します.
具体的な使い方は以下の通りです.
TypedValue.applyDimension(int unit, float value, DisplayMetrics metrics)
例えば、25 spをもらいたいです.それでは、使います.
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 25,context.getResources().getDisplayMetrics())
注意:
COMPLEX_UNIT_DIP:表示密度density(dpi/160)を掛けます.
TypedValue.OMPLEX_UNIT_SP:ピクセル密度scaledDensity(=density)を掛けます.
締め括りをつける
どの方法を使って単位転換を実現しても、私達はスクリーンの適応のためです.スクリーン適合は「大きな」課題であり、探索と蓄積を続けていく必要があります.決して足を止めてはいけません.励まし合う
何か問題があったら、すぐに連絡してください.ありがとうございます.