新聞中心
dpi是什么呢?
dpi是“dot per inch”的縮寫,每英寸像素數(shù)。
四種密度分類: ldpi (low), mdpi (medium), hdpi (high), and xhdpi (extra high)
一般情況下的普通屏幕:ldpi是120,mdpi是160,hdpi是240,xhdpi是320。

創(chuàng)新互聯(lián)長期為成百上千客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為扎賚特企業(yè)提供專業(yè)的成都做網(wǎng)站、網(wǎng)站設(shè)計,扎賚特網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
dpi計算公式
DPI=對角線的像素值/尺寸
手機屏幕分辨率和屏幕密度是兩碼事!并不是800*480的分辨率手機圖片就應(yīng)該放在hdpi文件夾中。5.0英寸 800*480屬于mdpi
也可以通過代碼獲?。?/p>
- DisplayMetrics metric = new DisplayMetrics();
- getWindowManager().getDefaultDisplay().getMetrics(metric);
- int width = metric.widthPixels; // 屏幕寬度(像素)
- int height = metric.heightPixels; // 屏幕高度(像素)
- float density = metric.density; // 屏幕密度(0.75 / 1.0 / 1.5)
- int densityDpi = metric.densityDpi; // 屏幕密度DPI(120 / 160 / 240)
Android會根據(jù)屏幕本身的尺寸與密度特性,自動載入對應(yīng)的資源,并把它們從邏輯像素(DIP,用于定義界面布局)轉(zhuǎn)換成屏幕上的物理像素。
首先看看 系統(tǒng)是如何通過Resources的getDrawable(int id)方法找圖片的
- public Drawable getDrawable(int id) throws NotFoundException {
- TypedValue value;
- synchronized (mAccessLock) {
- value = mTmpValue;
- if (value == null) {
- value = new TypedValue();
- } else {
- mTmpValue = null;
- }
- getValue(id, value, true);
- }
- Drawable res = loadDrawable(value, id);
- synchronized (mAccessLock) {
- if (mTmpValue == null) {
- mTmpValue = value;
- }
- }
- return res;
- }
TypedValue 我們可以理解為存儲數(shù)據(jù)的類型,主要被Resouces使用于持有的資源值
通過getValue(id,value,true)方法去得到該id的資源的屬性
- public void getValue(int id, TypedValue outValue, boolean resolveRefs)
- throws NotFoundException {
- boolean found = mAssets.getResourceValue(id, 0, outValue, resolveRefs);
- if (found) {
- return;
- }
- throw new NotFoundException("Resource ID #0x"
- + Integer.toHexString(id));
- }
最后通過loadDrawable(value, id)得到drawable,該方法到了底層的C代碼,大致意思就是通過TypedValue中的方法和屬性就可以獲得我們想要的屬性值,然后加載圖片
OK,下面來做個實驗.
試驗一: 手機是1280*720 4.3英寸 屬于xdpi 圖片分辨率為960*640 (按正常圖片不縮放 圖片放在手機里面 應(yīng)該不會充滿 整個手機) 我把圖片放在不
文件夾 加載時間(ms) 圖片顯示 說明
drawable 311 充滿屏幕 圖片有拉伸
drawable-nodpi 130 未充滿屏幕 圖片顯示正常
drawable-ldpi 442 充滿屏幕 圖片有拉伸
drawable-mdpi 383 充滿屏幕 圖片有拉伸
drawable-hdpi 226 充滿屏幕 圖片有拉伸
drawable-xhdpi 109 未充滿屏幕 圖片顯示正常
試驗二: 手機是800*480 4.3英寸 屬于hdpi 圖片分辨率為960*640 (按正常圖片不縮放 圖片放在手機里面 應(yīng)該充滿 整個手機) 我把圖片放在不同drawable文件夾中
文件夾 加載時間(ms) 圖片顯示 說明
drawable 290 充滿屏幕 圖片拉伸
drawable-nodpi 127 充滿屏幕 圖片顯示正常
drawable-ldpi 369 充滿屏幕 圖片拉伸
drawable-mdpi 346 充滿屏幕 圖片拉伸
drawable-hdpi 124 充滿屏幕 圖片顯示正常
drawable-xhdpi 241 未充滿屏幕 圖片縮放
得到結(jié)論:
drawable-nodpi 中 圖片不會被拉伸
系統(tǒng)在得到圖片時候,會先到設(shè)備對應(yīng)的dpi的文件夾下去去找資源文件,找到后應(yīng)該不會做縮放直接返回圖片。
如果沒有在對應(yīng)的dpi文件夾中找到,回去其他文件夾中查找,找到后會做相應(yīng)的縮放。
在高dpi找到的圖片會縮放,在低dpi的會拉伸
還有就是 源碼中可以看出 loadDrawable的過程實在C層做的。通過系統(tǒng)資源id加載會比java層直接加載圖片更便捷。
網(wǎng)站名稱:android開發(fā)圖片分辨率問題解決方案
網(wǎng)頁URL:http://m.fisionsoft.com.cn/article/ccidgeg.html


咨詢
建站咨詢
