关于android尺寸单位换算
生活随笔
收集整理的這篇文章主要介紹了
关于android尺寸单位换算
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
????? 今天看到經常用的一個dp轉px的方法
public static int dip2px(Context context, float dpValue) {final float scale = context.getResources().getDisplayMetrics().density;return (int) (dpValue * scale + 0.5f);}???? 計算的最后都加0.5f,這是為什么呢,于是在網上搜索一番發現千篇一律的dp轉px方法都寫成這樣,至于為什么也沒有說明,于是翻看View的源碼,在構造函數中對xml文件中的參數進行初始化,對于padding之類的尺寸的值的處理用到了這么一個方法 public static int complexToDimensionPixelSize(int data,DisplayMetrics metrics){final float value = complexToFloat(data);final float f = applyDimension((data>>COMPLEX_UNIT_SHIFT)&COMPLEX_UNIT_MASK,value,metrics);final int res = (int)(f+0.5f);if (res != 0) return res;if (value == 0) return 0;if (value > 0) return 1;return -1;}這是TypedValue中的一個方法
同樣的在這個類中,發現了另一個方法
public static float applyDimension(int unit, float value,DisplayMetrics metrics){switch (unit) {case COMPLEX_UNIT_PX:return value;case COMPLEX_UNIT_DIP:return value * metrics.density;case COMPLEX_UNIT_SP:return value * metrics.scaledDensity;case COMPLEX_UNIT_PT:return value * metrics.xdpi * (1.0f/72);case COMPLEX_UNIT_IN:return value * metrics.xdpi;case COMPLEX_UNIT_MM:return value * metrics.xdpi * (1.0f/25.4f);}return 0;}Converts an unpacked complex data value holding a dimension to its final floating point value將一個含有尺寸的沒有包裝的數據轉換成一個浮點型的值
這兩個方法的區別就是返回值的不同一個是int一個是float,根據自己的理解,applyDimension這個方法返回的換算結果更為精準,但是有時可能需要int型的數值,這時,如果用這個方法返回了一個float型0.x的數值轉成int型時就會變成0,所以需要+0.5f,防止0的出現
總結
以上是生活随笔為你收集整理的关于android尺寸单位换算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 看完书就忘,怎么办?告诉你六种方法(转载
- 下一篇: datetime instant 转_j