Android屏幕適配(基于實戰(zhàn)考慮“Android圖片應(yīng)該用多大巧骚,放在什么密度下面,能否用一套圖適配”的問題)

首先上個最新的Android分辨率統(tǒng)計的圖:


image.png

從上圖我們通過計算可以得出格二,目前的設(shè)備前四個占據(jù)大份額(77.6%)的分辨率的手機(jī)的屏幕長寬都是按照比例縮放的劈彪。

1.Android系統(tǒng)的圖片尋找機(jī)制對放在xhdpi,xxhdpi等不同密度的圖片會根據(jù)手機(jī)的密度尋找最合適的文件夾下的圖片顶猜,然后進(jìn)行根據(jù)密度的比率進(jìn)行放大沧奴,縮小處理。
2.意味著一張背景圖如果是7201280的大小的話长窄,放在上述分辨率的手機(jī)上都是可以無變形縮放的滔吠。目前我們的設(shè)計師大多情況都是按照ios的手機(jī)來設(shè)計界面的,主流是按照iphone6(7501334)
一計算挠日,你也會發(fā)現(xiàn)疮绷,這個也是和上述主流的分辨率長寬也是對應(yīng)的比率關(guān)系。

結(jié)論:我們設(shè)計師如果按照iphone6設(shè)計屏幕的話肆资,Android是可以一套圖片就可以達(dá)到界面的適配矗愧,
只不過放在xhdpi或者xxhdpi下面,Android SDK會自動屏幕尺寸選擇對應(yīng)的資源文件進(jìn)行渲染,如SDK檢測到你手機(jī)dpi是320的話會優(yōu)先到drawable-xhdpi文件夾下找對應(yīng)的圖片資源唉韭,注意只是優(yōu)先夜涕,假設(shè)你手機(jī)dpi是320,但是你只在xxhpdi文件夾下有對應(yīng)的圖片資源文件属愤,程序一樣可以正常運行女器。所以理論上來說只需要提供一種規(guī)格的圖片資源就ok了,如果只提供hdpi規(guī)格的圖片住诸,對于大分辨率的手機(jī)如果把圖片放大就會不清晰驾胆,所以需要提供一套你需要支持的最大dpi的圖片,這樣即使用戶的手機(jī)分辨率很小贱呐,這樣圖片縮小依然很清晰丧诺。

既然一套圖可以達(dá)到界面的適配,那應(yīng)該采取哪一套圖奄薇,又應(yīng)該放在Android下面的drawable還是mipmap下面驳阎,如果是放在drawable下面,又應(yīng)該放在drawable-xxhdpi,drawable-xhdpi,drawable-xxxhdpi還是別的密度下面呢馁蒂?帶著這個疑問呵晚,接著看下面的圖:

Android的dpi分布

Androidiosmdpi區(qū)間的手機(jī),dp=px沫屡。在3GS上饵隙,1point=1px。xhdpi區(qū)間的手機(jī)沮脖,1dp=2px金矛。在iPhone4上,1point=2px。在iPhone5上艺演,1point=2px。在iPhone6上,1point=2px呵俏。xxhdpi區(qū)間的手機(jī),1dp=3px往声。在iPhone6 plus上埂奈,1point=3px。

分析:從上圖我們可以看出ios的2x圖片就是對應(yīng)Android的xhdpi的密度奈应,ios的3x圖片就是對應(yīng)Android的xxhdpi的密度澜掩。
結(jié)論:前面我們得到結(jié)論是Android下面也是一套圖也是可以適配的,意味著我們將ios的3x圖放在xxhdpi文件夾下面杖挣,或者拿ios2x的圖片放在xhdpi下面都是能適配主流的分辨率機(jī)型肩榕。但是根據(jù)前面的分析,為了防止放大不清楚的情況惩妇,Android最好是放在xxhdpi下面株汉。

有人可能會有疑問筐乳,放在xxhdpi密度下面的圖片,會不會內(nèi)存增大乔妈,畢竟圖片會變大蝙云,那我們再進(jìn)行內(nèi)存層面的分析:
經(jīng)測試:
3.首頁2x的圖片放在xxhdpi下面,在xxhdpi密度的手機(jī)下顯示:width = 750 height = 1294 bitmap = 3791kb
4.首頁2x的圖片放在xhdpi下面,在xxhdpi密度的手機(jī)下顯示:width = 1125 height = 1941bitmap = 8529kb 大小是放在xxhdpi的2.25倍路召。

分析:有個 drawable的density 和真實屏幕的 targetDensity勃刨,因為 scaledWidth 和 scaledHeight 是由 width 和 height 乘以 scale (手機(jī)真實的屏幕密度/drawable的密度)得到的。我們看到 Canvas 放大了 scale 倍股淡,然后又把讀到內(nèi)存的這張 bitmap 畫上去身隐,相當(dāng)于把這張 bitmap 放大了 scale 平方倍。
結(jié)論:雖然上面說了xxhdpi下的圖片在加載的過程內(nèi)存消耗得更少唯灵,但是前提是指同一張圖片從xxhdpi一到xhpi下面的話贾铝,加載內(nèi)存一般會擴(kuò)大2.25倍。但是由于3x的圖片本來長寬本來就比2x的圖片長寬的像素點就是多1.5倍早敬。所以一般在這個層面忌傻,如果我們把ios的2x圖片放在xhdpi下面和把ios的3x圖片放在xxhdpi下面,對于同一個真機(jī)加載消耗的內(nèi)存基本是一樣的搞监。

5.另外很多人對圖片是放在mipmap下面還是drawable下面總是有疑問水孩,對放在什么文件夾下面沒有什么概念,對此官方有個解釋:
Drawables may be stripped out as part of dp-specific resource optimisation. But mipmaps will not be stripped. So it's best to put app icons under mipmaps.

Here is more detail written on google documentation page:
Different home screen launcher apps on different devices show app launcher icons at various resolutions. When app resource optimization techniques remove resources for unused screen densities, launcher icons can wind up looking fuzzy because the launcher app has to upscale a lower-resolution icon for display. To avoid these display issues, apps should use the mipmap/ resource folders for launcher icons. The Android system preserves these resources regardless of density stripping, and ensures that launcher apps can pick icons with the best resolution for display.

總結(jié)下:上面話就是想表達(dá)放在drawable的圖片會對不適用真機(jī)屏幕密度的資源進(jìn)行移除琐驴,放在mipmap依然會保留下各個密度的圖片俘种,所以為了保證桌面圖標(biāo)的顯示質(zhì)量因此放在mipmap下面,其他的圖標(biāo)建議都放在drawable文件夾下面吧绝淡。

6.此文發(fā)出之后宙刘,好多人提出:mipmap 中圖片適配內(nèi)存消耗會更小些?所以專門針對這個問題牢酵,反編譯了幾個google的app
我查了下?lián)f放在 mipmap 減少內(nèi)存的原因是因為:比如 493 的 ppi 的手機(jī)悬包,會到 xxxhdpi 下面找圖片,然后自動按照 493 和 xxxhdpi 的手機(jī)密度比進(jìn)行縮放加載馍乙,從而不用加載 xxxhdpi 的內(nèi)存大小的圖片布近,以達(dá)到內(nèi)存優(yōu)化,但是這個 drawable 文件夾下面也是有這樣的機(jī)制的丝格,除了這個內(nèi)存優(yōu)化撑瞧,其他沒有找到官方的解釋,另外通過反編譯 google 開發(fā)的幾個 app显蝌,都發(fā)現(xiàn) google 的 app 中的 mipmap 文件夾下面基本都是放 launcher 圖標(biāo)预伺,其他的圖標(biāo)都是放在 drawable 下面的。

最終結(jié)論:那么經(jīng)過上面一系列的分析,如果你們的設(shè)計師是按照iphone6來設(shè)計界面的話酬诀,Android的屏幕適配最好就是將ios的3x圖片放在Android的drawable-xxhdpi文件夾下面脏嚷。

                                如果個人描述有什么不準(zhǔn)確的地方,煩請指出料滥,謝謝H谎邸!
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末葵腹,一起剝皮案震驚了整個濱河市高每,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌践宴,老刑警劉巖鲸匿,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異阻肩,居然都是意外死亡带欢,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門烤惊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來乔煞,“玉大人,你說我怎么就攤上這事柒室《杉郑” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵雄右,是天一觀的道長空骚。 經(jīng)常有香客問我,道長擂仍,這世上最難降的妖魔是什么囤屹? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮逢渔,結(jié)果婚禮上肋坚,老公的妹妹穿的比我還像新娘。我一直安慰自己肃廓,他們只是感情好冲簿,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著亿昏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪档礁。 梳的紋絲不亂的頭發(fā)上角钩,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼递礼。 笑死惨险,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的脊髓。 我是一名探鬼主播辫愉,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼将硝!你這毒婦竟也來了恭朗?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤依疼,失蹤者是張志新(化名)和其女友劉穎痰腮,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體律罢,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡膀值,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了误辑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沧踏。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖巾钉,靈堂內(nèi)的尸體忽然破棺而出翘狱,到底是詐尸還是另有隱情,我是刑警寧澤睛琳,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布盒蟆,位于F島的核電站,受9級特大地震影響师骗,放射性物質(zhì)發(fā)生泄漏历等。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一辟癌、第九天 我趴在偏房一處隱蔽的房頂上張望寒屯。 院中可真熱鬧,春花似錦黍少、人聲如沸寡夹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽菩掏。三九已至,卻和暖如春昵济,著一層夾襖步出監(jiān)牢的瞬間智绸,已是汗流浹背野揪。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留瞧栗,地道東北人斯稳。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像迹恐,于是被迫代替她去往敵國和親挣惰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容