日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于android尺寸单位换算

發(fā)布時間:2023/12/16 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于android尺寸单位换算 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

????? 今天看到經(jīng)常用的一個dp轉(zhuǎn)px的方法

public static int dip2px(Context context, float dpValue) {final float scale = context.getResources().getDisplayMetrics().density;return (int) (dpValue * scale + 0.5f);}
???? 計算的最后都加0.5f,這是為什么呢,于是在網(wǎng)上搜索一番發(fā)現(xiàn)千篇一律的dp轉(zhuǎn)px方法都寫成這樣,至于為什么也沒有說明,于是翻看View的源碼,在構(gòu)造函數(shù)中對xml文件中的參數(shù)進行初始化,對于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中的一個方法

同樣的在這個類中,發(fā)現(xiàn)了另一個方法

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

將一個含有尺寸的沒有包裝的數(shù)據(jù)轉(zhuǎn)換成一個浮點型的值

這兩個方法的區(qū)別就是返回值的不同一個是int一個是float,根據(jù)自己的理解,applyDimension這個方法返回的換算結(jié)果更為精準,但是有時可能需要int型的數(shù)值,這時,如果用這個方法返回了一個float型0.x的數(shù)值轉(zhuǎn)成int型時就會變成0,所以需要+0.5f,防止0的出現(xiàn)

總結(jié)

以上是生活随笔為你收集整理的关于android尺寸单位换算的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。