1. 程式人生 > >2017Andriod最新簡單適配方案(圖片)與IOS對比

2017Andriod最新簡單適配方案(圖片)與IOS對比

轉載 地址 http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2017/0413/7824.html 


首先上個最新的Android解析度統計的圖:

從上圖我們通過計算可以得出,目前的裝置前四個佔據大份額(77.6%)的解析度的手機的螢幕長寬都是按照比例縮放的。

1.Android系統的圖片尋找機制對放在xhdpi,xxhdpi等不同密度的圖片會根據手機的密度尋找最合適的資料夾下的圖片,然後進行根據密度的比率進行放大,縮小處理。
2.意味著一張背景圖如果是7201280的大小的話,放在上述解析度的手機上都是可以無變形縮放的。目前我們的設計師大多情況都是按照ios的手機來設計介面的,主流是按照iphone6(750

1334)
一計算,你也會發現,這個也是和上述主流的解析度長寬也是對應的比率關係。

結論:我們設計師如果按照iphone6設計螢幕的話,Android是可以一套圖片就可以達到介面的適配,只不過放在xhdpi或者xxhdpi下面,Android SDK會自動螢幕尺寸選擇對應的資原始檔進行渲染,如SDK檢測到你手機dpi是320的話會優先到drawable-xhdpi資料夾下找對應的圖片資源,注意只是優先,假設你手機dpi是320,但是你只在xxhpdi資料夾下有對應的圖片資原始檔,程式一樣可以正常執行。所以理論上來說只需要提供一種規格的圖片資源就ok了,如果只提供hdpi規格的圖片,對於大解析度的手機如果把圖片放大就會不清晰,所以需要提供一套你需要支援的最大dpi的圖片,這樣即使使用者的手機解析度很小,這樣圖片縮小依然很清晰。

既然一套圖可以達到介面的適配,那應該採取哪一套圖,又應該放在Android下面的drawable還是mipmap下面,如果是放在drawable下面,又應該放在drawable-xxhdpi,drawable-xhdpi,drawable-xxxhdpi還是別的密度下面呢?帶著這個疑問,接著看下面的圖:

Android的dpi分佈

Androidiosmdpi區間的手機,dp=px。在3GS上,1point=1px。xhdpi區間的手機,1dp=2px。在iPhone4上,1point=2px。在iPhone5上,1point=2px。在iPhone6上,1point=2px。xxhdpi區間的手機,1dp=3px。在iPhone6 plus上,1point=3px。

分析:從上圖我們可以看出ios的2x圖片就是對應Android的xhdpi的密度,ios的3x圖片就是對應Android的xxhdpi的密度。結論:前面我們得到結論是Android下面也是一套圖也是可以適配的,意味著我們將ios的3x圖放在xxhdpi資料夾下面,或者拿ios2x的圖片放在xhdpi下面都是能適配主流的解析度機型。但是根據前面的分析,為了防止放大不清楚的情況,Android最好是放在xxhdpi下面。

有人可能會有疑問,放在xxhdpi密度下面的圖片,會不會記憶體增大,畢竟圖片會變大,那我們再進行記憶體層面的分析:
經測試:
3.首頁2x的圖片放在xxhdpi下面,在xxhdpi密度的手機下顯示:width = 750 height = 1294 bitmap = 3791kb
4.首頁2x的圖片放在xhdpi下面,在xxhdpi密度的手機下顯示:width = 1125 height = 1941bitmap = 8529kb 大小是放在xxhdpi的2.25倍。

分析:有個 drawable的density 和真實螢幕的 targetDensity,因為 scaledWidth 和 scaledHeight 是由 width 和 height 乘以 scale (手機真實的螢幕密度/drawable的密度)得到的。我們看到 Canvas 放大了 scale 倍,然後又把讀到記憶體的這張 bitmap 畫上去,相當於把這張 bitmap 放大了 scale 平方倍。結論:雖然上面說了xxhdpi下的圖片在載入的過程記憶體消耗得更少,但是前提是指同一張圖片從xxhdpi一到xhpi下面的話,載入記憶體一般會擴大2.25倍。但是由於3x的圖片本來長寬本來就比2x的圖片長寬的畫素點就是多1.5倍。所以一般在這個層面,如果我們把ios的2x圖片放在xhdpi下面和把ios的3x圖片放在xxhdpi下面,對於同一個真機載入消耗的記憶體基本是一樣的。

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.

總結下:上面話就是想表達放在drawable的圖片會對不適用真機螢幕密度的資源進行移除,放在mipmap依然會保留下各個密度的圖片,所以為了保證桌面圖示的顯示質量因此放在mipmap下面,其他的圖示建議都放在drawable資料夾下面吧。

最終結論:那麼經過上面一系列的分析,如果你們的設計師是按照iphone6來設計介面的話,Android的螢幕適配最好就是將ios的3x圖片放在Android的drawable-xxhdpi資料夾下面。