av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

android開(kāi)發(fā)圖片分辨率問(wèn)題解決方案

dpi是什么呢?

dpi是“dot per inch”的縮寫(xiě),每英寸像素?cái)?shù)。
四種密度分類(lèi): ldpi (low), mdpi (medium), hdpi (high), and xhdpi (extra high)
一般情況下的普通屏幕:ldpi是120,mdpi是160,hdpi是240,xhdpi是320。

創(chuàng)新互聯(lián)長(zhǎng)期為成百上千客戶(hù)提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為扎賚特企業(yè)提供專(zhuān)業(yè)的成都做網(wǎng)站、網(wǎng)站設(shè)計(jì),扎賚特網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。

dpi計(jì)算公式
DPI=對(duì)角線(xiàn)的像素值/尺寸

手機(jī)屏幕分辨率和屏幕密度是兩碼事!并不是800*480的分辨率手機(jī)圖片就應(yīng)該放在hdpi文件夾中。5.0英寸 800*480屬于mdpi

也可以通過(guò)代碼獲?。?/p>

 
 
  1. DisplayMetrics metric = new DisplayMetrics(); 
  2.        getWindowManager().getDefaultDisplay().getMetrics(metric); 
  3.        int width = metric.widthPixels;  // 屏幕寬度(像素) 
  4.        int height = metric.heightPixels;  // 屏幕高度(像素) 
  5.        float density = metric.density;  // 屏幕密度(0.75 / 1.0 / 1.5) 
  6.        int densityDpi = metric.densityDpi;  // 屏幕密度DPI(120 / 160 / 240) 

Android會(huì)根據(jù)屏幕本身的尺寸與密度特性,自動(dòng)載入對(duì)應(yīng)的資源,并把它們從邏輯像素(DIP,用于定義界面布局)轉(zhuǎn)換成屏幕上的物理像素。

首先看看 系統(tǒng)是如何通過(guò)Resources的getDrawable(int id)方法找圖片的

 
 
  1. public Drawable getDrawable(int id) throws NotFoundException { 
  2.         TypedValue value; 
  3.         synchronized (mAccessLock) { 
  4.             value = mTmpValue; 
  5.             if (value == null) { 
  6.                 value = new TypedValue(); 
  7.             } else { 
  8.                 mTmpValue = null; 
  9.             } 
  10.             getValue(id, value, true); 
  11.         } 
  12.         Drawable res = loadDrawable(value, id); 
  13.         synchronized (mAccessLock) { 
  14.             if (mTmpValue == null) { 
  15.                 mTmpValue = value; 
  16.             } 
  17.         } 
  18.         return res; 
  19.     } 
  20.   

TypedValue 我們可以理解為存儲(chǔ)數(shù)據(jù)的類(lèi)型,主要被Resouces使用于持有的資源值
通過(guò)getValue(id,value,true)方法去得到該id的資源的屬性

 
 
  1. public void getValue(int id, TypedValue outValue, boolean resolveRefs) 
  2.             throws NotFoundException { 
  3.         boolean found = mAssets.getResourceValue(id, 0, outValue, resolveRefs); 
  4.         if (found) { 
  5.             return; 
  6.         } 
  7.         throw new NotFoundException("Resource ID #0x" 
  8.                                     + Integer.toHexString(id)); 
  9.     } 
  10.   

最后通過(guò)loadDrawable(value, id)得到drawable,該方法到了底層的C代碼,大致意思就是通過(guò)TypedValue中的方法和屬性就可以獲得我們想要的屬性值,然后加載圖片

OK,下面來(lái)做個(gè)實(shí)驗(yàn).

試驗(yàn)一: 手機(jī)是1280*720 4.3英寸 屬于xdpi 圖片分辨率為960*640 (按正常圖片不縮放 圖片放在手機(jī)里面 應(yīng)該不會(huì)充滿(mǎn) 整個(gè)手機(jī)) 我把圖片放在不

文件夾 加載時(shí)間(ms) 圖片顯示 說(shuō)明

drawable 311 充滿(mǎn)屏幕 圖片有拉伸

drawable-nodpi 130 未充滿(mǎn)屏幕 圖片顯示正常

drawable-ldpi 442 充滿(mǎn)屏幕 圖片有拉伸

drawable-mdpi 383 充滿(mǎn)屏幕 圖片有拉伸

drawable-hdpi 226 充滿(mǎn)屏幕 圖片有拉伸

drawable-xhdpi 109 未充滿(mǎn)屏幕 圖片顯示正常

試驗(yàn)二: 手機(jī)是800*480 4.3英寸 屬于hdpi 圖片分辨率為960*640 (按正常圖片不縮放 圖片放在手機(jī)里面 應(yīng)該充滿(mǎn) 整個(gè)手機(jī)) 我把圖片放在不同drawable文件夾中

文件夾 加載時(shí)間(ms) 圖片顯示 說(shuō)明

drawable 290 充滿(mǎn)屏幕 圖片拉伸

drawable-nodpi 127 充滿(mǎn)屏幕 圖片顯示正常

drawable-ldpi 369 充滿(mǎn)屏幕 圖片拉伸

drawable-mdpi 346 充滿(mǎn)屏幕 圖片拉伸

drawable-hdpi 124 充滿(mǎn)屏幕 圖片顯示正常

drawable-xhdpi 241 未充滿(mǎn)屏幕 圖片縮放

得到結(jié)論:

drawable-nodpi 中 圖片不會(huì)被拉伸

系統(tǒng)在得到圖片時(shí)候,會(huì)先到設(shè)備對(duì)應(yīng)的dpi的文件夾下去去找資源文件,找到后應(yīng)該不會(huì)做縮放直接返回圖片。

如果沒(méi)有在對(duì)應(yīng)的dpi文件夾中找到,回去其他文件夾中查找,找到后會(huì)做相應(yīng)的縮放。

在高dpi找到的圖片會(huì)縮放,在低dpi的會(huì)拉伸

還有就是 源碼中可以看出 loadDrawable的過(guò)程實(shí)在C層做的。通過(guò)系統(tǒng)資源id加載會(huì)比java層直接加載圖片更便捷。


網(wǎng)站名稱(chēng):android開(kāi)發(fā)圖片分辨率問(wèn)題解決方案
文章鏈接:http://uogjgqi.cn/article/ccidgeg.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問(wèn)/技術(shù)咨詢(xún)/運(yùn)營(yíng)咨詢(xún)/技術(shù)建議/互聯(lián)網(wǎng)交流