Splash 占位图适配 全面屏笔记
在簡(jiǎn)書搜索 全面屏適配,可以找出一大堆結(jié)果,這篇筆記不再多說(shuō)已經(jīng)有的理論知識(shí),大家參考最多的資料也貼在文章的最后了,主要內(nèi)容記錄最近在開發(fā)中遇到的冷啟動(dòng)占位圖splash適配全面屏的問(wèn)題。
左邊是一加5T,右邊是一加5(這里劉老板請(qǐng)給我廣告費(fèi))
通過(guò)資料,7.0以上是默認(rèn)適配全面屏了, 適配6.0的全面屏機(jī)器,將ratio_float設(shè)置為2.1以上即可
<meta-data android:name="android.max_aspect" android:value="ratio_float"/> 復(fù)制代碼這些大家都已經(jīng)知道了。
同樣的,SplashActivity放一張bg_splash占位圖,然后當(dāng)有廣告的時(shí)候再貼一張廣告圖覆蓋在上邊。這個(gè)業(yè)務(wù)也是業(yè)內(nèi)統(tǒng)一的做法。
當(dāng)時(shí)drawable-xxhdpi里放的bg_splash是16:9的圖,不出所料的出現(xiàn)了圖片被上下拉伸的結(jié)果。 而給來(lái)的廣告圖url(比例也是16:9),進(jìn)行了scaleType=centerCrop的縮放, 平時(shí)可以做到的 底部logo看起來(lái)沒(méi)有變化的效果,現(xiàn)在明顯有了差異
原因: 不論16:9還是18:9,占位圖都是去本地drawale文件找,18:9的基本上都是xxhdpi了,16:9不一定,因?yàn)檫@個(gè)比例與dpi無(wú)關(guān)。 暫且我們都以xxhdpi為例,18:9的機(jī)器找本地bg_splash,找到了drawable-xxhdpi的資源,而這個(gè)文件夾里只放著原先比例為16:9的圖,系統(tǒng)加載圖片時(shí)會(huì)自動(dòng)上下拉伸。
解決方案 第一次嘗試的時(shí)候,是增加了drawable-long資源文件夾,但是出現(xiàn)了RuntimeException
所以最后采用增加drawable-xxhdpi-2016x1080資源文件夾 drawable-xxhdpi-2016x1080是怎么來(lái)的呢? 來(lái)自官方文檔的翻譯 其中有一段對(duì)限定符的描述
我當(dāng)時(shí)馬上就新建了一個(gè) drawable-xxhdpi-1080x2160的文件夾,把18:9的bg_splash.jpg丟進(jìn)去。 結(jié)果一加5T還是去找xxhdpi的資源,然后發(fā)現(xiàn)應(yīng)該height x width 重新建 drawable-xxhdpi-2160x1080文件夾,還是不行.... 我發(fā)現(xiàn)了 可用分辨率這個(gè)參數(shù),文件夾改成 drawable-xxhdpi-2034x1080,完美找到18:9的圖,全面屏的啟動(dòng)圖無(wú)需上下拉伸16:9的圖了。
為了適配更多的全面屏機(jī)型,將比例降到1.86,也就是2016x1080.
解決了本地圖片被強(qiáng)行上下拉伸的問(wèn)題后,18:9的機(jī)器也能乖乖的顯示splash占位圖了,可是給來(lái)的廣告圖仍然是16:9,像素是2160x1215,不是說(shuō)進(jìn)行了scaleType=centerCrop的縮放么,還會(huì)出問(wèn)題么?
會(huì)....因?yàn)?6:9的圖放在16:9的機(jī)器上,不需要縮放,直接填充滿就行了,只有放在全面屏上才需要去裁剪。
本以為去掉ImageView的scaleType就好了,然而并沒(méi)有什么用,看了下源碼,
坑爹啊,默認(rèn)是fit_center的方式居中縮放。那我就加個(gè)判斷嘛
if (1.00d * ScreenUtil.screenHeight / ScreenUtil.screenWidth > 1.84d) {adsImage.setScaleType(ImageView.ScaleType.CENTER_CROP);} else {adsImage.setScaleType(ImageView.ScaleType.FIT_XY);} 復(fù)制代碼只有在屏幕比例符合全面屏的時(shí)候才去裁剪,否則都用fill的方式填充。
附上無(wú)需context即可拿到屏幕參數(shù)的代碼
DisplayMetrics dm = Resources.getSystem().getDisplayMetrics();screenWidth = dm.widthPixels;screenHeight = dm.heightPixels; 復(fù)制代碼至此,全面屏的啟動(dòng)頁(yè)/廣告圖適配已經(jīng)完成。
###總結(jié) 1.ratio_float設(shè)置為2.1,兼容6.0機(jī)器; 2.新增drawable-xxhdpi-2034x1080資源文件夾放18:9的占位圖; 3.判斷屏幕比例再選擇縮放方式; 4.最佳解決方案就不使用一整張占位圖,而是參考網(wǎng)易嚴(yán)選的方案 bg_spalsh是layer-list,底色全白,加上一個(gè)slogen的png圖,這個(gè)slogen圖marginBottom=43dp
參考資料: 1.關(guān)于Android的像素相關(guān)知識(shí)
2.小米全面屏及虛擬鍵適配說(shuō)明
3.金立18:9全面屏適配說(shuō)明
4.全面屏?xí)r代 | APP如何快速適配? 這4個(gè)關(guān)鍵點(diǎn)你要知道!
5.你已經(jīng)知道怎么適配iPhone X了,那么Android全面屏呢?
6.scaleType的縮放方式
總結(jié)
以上是生活随笔為你收集整理的Splash 占位图适配 全面屏笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ELK收集日志到mysql数据库
- 下一篇: 代码管理 ,git 命令整理