成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

android開發圖片分辨率問題解決方案

移動開發 Android
一直受到android開發圖片分辨率問題困擾.drawable-(xdpi,hdpi,mdpi,ldpi,nodpi)這幾個文件夾到底怎么放圖片呢?

dpi是什么呢?

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

dpi計算公式
DPI=對角線的像素值/尺寸

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

也可以通過代碼獲取:

  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會根據屏幕本身的尺寸與密度特性,自動載入對應的資源,并把它們從邏輯像素(DIP,用于定義界面布局)轉換成屏幕上的物理像素。

首先看看 系統是如何通過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 我們可以理解為存儲數據的類型,主要被Resouces使用于持有的資源值
通過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.   

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

OK,下面來做個實驗.

試驗一: 手機是1280*720 4.3英寸 屬于xdpi 圖片分辨率為960*640 (按正常圖片不縮放 圖片放在手機里面 應該不會充滿 整個手機) 我把圖片放在不

文件夾 加載時間(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 (按正常圖片不縮放 圖片放在手機里面 應該充滿 整個手機) 我把圖片放在不同drawable文件夾中

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

drawable 290 充滿屏幕 圖片拉伸

drawable-nodpi 127 充滿屏幕 圖片顯示正常

drawable-ldpi 369 充滿屏幕 圖片拉伸

drawable-mdpi 346 充滿屏幕 圖片拉伸

drawable-hdpi 124 充滿屏幕 圖片顯示正常

drawable-xhdpi 241 未充滿屏幕 圖片縮放

得到結論:

drawable-nodpi 中 圖片不會被拉伸

系統在得到圖片時候,會先到設備對應的dpi的文件夾下去去找資源文件,找到后應該不會做縮放直接返回圖片。

如果沒有在對應的dpi文件夾中找到,回去其他文件夾中查找,找到后會做相應的縮放。

在高dpi找到的圖片會縮放,在低dpi的會拉伸

還有就是 源碼中可以看出 loadDrawable的過程實在C層做的。通過系統資源id加載會比java層直接加載圖片更便捷。

責任編輯:張葉青 來源: eoe Android開發者社區
相關推薦

2012-05-09 10:08:41

跨機房

2010-08-04 10:20:30

Flex組件開發

2010-03-30 16:04:34

Linux Nginx

2010-09-27 13:14:42

JVM內存限制

2021-12-21 22:57:04

Windows 11Windows微軟

2010-02-06 14:54:11

C++指針漂移

2010-10-08 13:09:38

JavaScript數

2010-05-31 12:53:56

Nagios apac

2011-03-23 16:38:28

LAMP

2010-04-28 19:24:17

Hp unix

2010-08-30 12:46:42

DIV+CSS

2010-10-09 12:58:59

JS腳本兼容

2021-01-13 10:18:29

SocketNetty粘包

2010-09-07 09:08:03

DIV彈出層

2010-04-06 09:33:37

CentOS系統

2010-02-23 17:49:56

WCF傳輸大數據

2010-02-24 10:55:01

WCF跨域訪問

2010-05-04 11:30:29

Oracle漢字長度

2010-07-30 12:40:00

Flex跨域訪問

2010-08-26 08:45:32

margin:0pxa
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产视频三区 | 国产精品一区二区在线 | 久久久久国产一区二区三区 | 免费不卡视频 | 天堂色网 | 亚洲人成人一区二区在线观看 | 美女拍拍拍网站 | 日日干夜夜操 | 自拍偷拍第一页 | 一本一道久久a久久精品蜜桃 | 国产高清精品一区二区三区 | 日韩欧美精品在线 | 久久综合伊人 | 中文字幕一区二区三区在线观看 | 狠狠艹 | 日韩三级电影在线看 | 欧美高清hd | 国产精品美女www爽爽爽 | 成人精品鲁一区一区二区 | 日韩视频―中文字幕 | 国产二区精品视频 | 亚洲成人精品 | 精品久久久久久久久久 | 99精品亚洲国产精品久久不卡 | 亚洲国产成人av | 色资源在线 | 国产精品欧美一区二区三区 | 日韩精品人成在线播放 | 黄在线免费观看 | 欧美综合久久 | 国产乱码精品1区2区3区 | 欧美videosex性极品hd | 美日韩视频| 免费a大片 | 在线一区二区三区 | 国产精品久久久久久久久图文区 | 久久久久久久国产 | 欧美精品成人 | 欧美福利一区 | 国产伦精品一区二区三区高清 | jlzzjlzz欧美大全 |