Android像素

首先來(lái)看屏幕密度DPI和分辨率PPI

DPI

DPI的全稱是 Dots Per Inch,Inch是一個(gè)物理單位(無(wú)論在任何設(shè)備上,其大小都是固定的),所以DPI就指在一個(gè)Inch的物理長(zhǎng)度內(nèi)有多少個(gè)Dot,160DPI的屏幕就表示一個(gè)Inch包含160個(gè)Dot。Android設(shè)備用DPI來(lái)表示屏幕密度(Density),屏幕密度大就表示一個(gè)Inch包含的Dot比較多。

PPI

其實(shí)對(duì)Android而言,DPI等價(jià)于PPI(Pixels-Per-Inch)。


enter description here
enter description here

通常我們說(shuō)一個(gè)設(shè)備是多少寸時(shí),指的是屏幕對(duì)角線(Diagonal)是多少inch,所以用對(duì)角線的像素值(px)除以對(duì)角線長(zhǎng)度(inch),就可以計(jì)算出PPI。


enter description here
enter description here

Android中有哪些尺寸單位?

主要包括:dp,sp,pt,px,mm,in

dp

即dip(Density-independent Pixels),是一種與屏幕密度無(wú)關(guān)的尺寸單位,當(dāng)屏幕密度是160dpi時(shí),1dp = 1px。當(dāng)運(yùn)行在高dpi的屏幕上時(shí),dp就會(huì)按比例放大,當(dāng)運(yùn)行在低dpi的屏幕上時(shí),dp就會(huì)被按比例縮小。
當(dāng)屏幕密度是320時(shí),1dp = 2px,因此dp是一種簡(jiǎn)單的解決view在不同大小屏幕上顯示的問(wèn)題的解決辦法。

sp

sp(Scale-independent Pixels)和dp是比較相似的,但是它會(huì)隨著用戶對(duì)系統(tǒng)字體大小的設(shè)置進(jìn)行比例縮放,換句話說(shuō),它能夠跟隨用戶系統(tǒng)字體大小變化。所以它更加適合做為字體大小的單位。

pt

pt(Point)是一個(gè)基于屏幕大小的物理尺寸,1pt等于1/72英寸(inch)。(不常用)

px

px(Pixels)相當(dāng)于實(shí)際屏幕的像素,由于不同屏幕的像素?cái)?shù)差異比較大,因此這個(gè)單位不被推薦用于尺寸單位,

mm

mm(Millimeters)即毫米,這是一個(gè)基于屏幕物理尺寸的單位。(不常用)

in

in(Inches)即英寸,也是一個(gè)基于屏幕物理尺寸的單位。(不常用)

dp與px之間的換算

px = dp * (dpi / 160)

舉例來(lái)說(shuō),小米Pad的屏幕密度為326dpi,如果需要顯示的圖片大小為20dp,那么就需要提供一個(gè) 20 (326 / 160) = 40px的圖片才能達(dá)到最佳顯示效果,如果還要適配一個(gè)163dpi的屏幕,那么還需要再提供一個(gè)20 (163 / 160) = 20px的圖片。

各個(gè)尺寸之間的轉(zhuǎn)換

dp轉(zhuǎn)px

public static int dip2px(Context context,float dipValue){
    final float scale = context.getResources().getDisplayMetrics().density;
    return (int) (dipValue*scale+ 0.5f);
}

注意:這塊為啥沒(méi)有160呢?
因?yàn)椴榭丛创a就知道了。

px轉(zhuǎn)dp

 public static int px2dip(Context context,float px){
    final float scale = context.getResources().getDisplayMetrics().density;
    return (int)(px/scale +0.5f);
}

sp轉(zhuǎn)px

 public static int sp2px(Context context,float spValue){
    final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
    return (int)(spValue*fontScale+0.5f);
}

px轉(zhuǎn)sp

 public static int px2sp(Context context,float pxValue){
    final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
    return (int)(pxValue/fontScale+0.5f);
}

mm轉(zhuǎn)in

 public static double mm2in(double mmValue){
    return mmValue*(10/254);
}

in轉(zhuǎn)mm

public static double in2mm(double inValue){
    return inValue*(25.4);
}

參考鏈接:
http://www.itdecent.cn/p/913943d25829
http://blog.csdn.net/wenwen091100304/article/details/49744951

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容