新聞中心
這篇文章主要介紹了android中怎么優(yōu)雅的從網(wǎng)絡(luò)加載點(diǎn)九圖的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇android中怎么優(yōu)雅的從網(wǎng)絡(luò)加載點(diǎn)九圖文章都會(huì)有所收獲,下面我們一起來(lái)看看吧。
創(chuàng)新互聯(lián)專注于企業(yè)網(wǎng)絡(luò)營(yíng)銷推廣、網(wǎng)站重做改版、邳州網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5建站、商城建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為邳州等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。
1 背景
1.1 什么是點(diǎn)九圖
其實(shí)點(diǎn)九圖和我們用的其他格式的圖沒(méi)有什么大的不同,只不過(guò)是在圖片的四周各增加了1px的純黑(#FF000000)的線進(jìn)行標(biāo)記。例如:
標(biāo)記位置 | 含義 |
---|---|
左-黑線 | 縱向拉伸區(qū)域 |
上-黑線 | 橫向拉伸區(qū)域 |
右-黑線 | 縱向顯示區(qū)域 |
下-黑線 | 橫向顯示區(qū)域 |
1.2 Android是如何加載點(diǎn)九圖的
當(dāng)我們將點(diǎn)九圖放在res目錄下,Android不是直接去加載點(diǎn)九圖的,而是在編譯的時(shí)候?qū)⑵滢D(zhuǎn)換成另一種格式,這種格式是將其四周的黑色像素保存在Bitmap類中的mNinePatchChunk的byte[]數(shù)組中,并去掉四周一像素的寬度;在使用的時(shí)候,當(dāng)判斷mNinePatchChunk不為空且為9patchchunk,則將其構(gòu)造為NinePatchDrawable,否則構(gòu)造為BitmapDrawable,最終設(shè)置給view。所以,最后打包后的點(diǎn)九圖已經(jīng)不是原來(lái)帶黑線的點(diǎn)九圖了。
2 使用方案
2.1 遇到的坑
如果沒(méi)做任何處理,當(dāng)我們從服務(wù)端直接拉取點(diǎn)九的圖設(shè)置到我們的view上時(shí),發(fā)現(xiàn)圖片并不會(huì)拉伸,并且圖片周圍的黑線也會(huì)顯示出來(lái)。從上1.2Android加載點(diǎn)九圖的原理可知,之所以出現(xiàn)這種問(wèn)題,是因?yàn)槲覀兩倭司幾g這一步,是直接拿原始的點(diǎn)九圖設(shè)置到view上的,所以才出現(xiàn)問(wèn)題。 知道錯(cuò)誤的原因后,我們可以做如下幾種方式處理:
讓產(chǎn)品或者設(shè)計(jì)師先進(jìn)行轉(zhuǎn)換后(轉(zhuǎn)換工具由開(kāi)發(fā)提供)再上傳到服務(wù)器,這時(shí)客戶端再?gòu)姆?wù)端拉取到的就是編譯處理后的點(diǎn)九圖了
將原始點(diǎn)九圖上傳到一個(gè)轉(zhuǎn)換平臺(tái),平臺(tái)進(jìn)行轉(zhuǎn)換后再上傳到服務(wù)器
另外一種是客戶端拿到原始的點(diǎn)九圖后自行處理,根據(jù)加載的原理自行構(gòu)造出NinePatchDrawable,這個(gè)過(guò)程放到客戶端渲染的時(shí)候顯然太耗時(shí),不符合要求 我們以QQ的方案為例(第一種)來(lái)討論實(shí)現(xiàn)方案。
2.2 使用方案
先看下總的流程圖:
使用上述方案的注意事項(xiàng):
步驟2畫黑線必須是純黑色像素,且圖片的四個(gè)角必須為透明像素點(diǎn),否則Android無(wú)法識(shí)別,且在步驟3中將無(wú)法轉(zhuǎn)換
步驟3中,可以使用Android SDK自帶工具aapt進(jìn)行轉(zhuǎn)換:aapt c -v -S . -C .\output,其中.表示當(dāng)前目錄,.\output表示目標(biāo)目錄
步驟4中,上傳過(guò)程中不能對(duì)轉(zhuǎn)換后的圖進(jìn)行壓縮,因?yàn)檗D(zhuǎn)換后的點(diǎn)九圖的黑線信息被保存到了png圖片的輔助數(shù)據(jù)快中,這部分?jǐn)?shù)據(jù)在壓縮的過(guò)程中會(huì)消失,導(dǎo)致最終客戶端拉取到的圖片不是點(diǎn)九圖
步驟4中,某些cdn因?yàn)槭×髁?,或者其他原因,?duì)圖片進(jìn)行壓縮或者轉(zhuǎn)碼為webp格式,這樣會(huì)導(dǎo)致最終拉取到的圖片不是點(diǎn)九圖。
步驟8中,需要通過(guò)Bitmap創(chuàng)建drawable,如果是使用res目錄下的,Android系統(tǒng)會(huì)自動(dòng)完成,如果是獲取網(wǎng)絡(luò)圖片則需要自己手動(dòng)創(chuàng)建,如下:
步驟9中,一定要使用緩存,不然異步加載的過(guò)程中,在list中顯示會(huì)有問(wèn)題,跳變很嚴(yán)重。
關(guān)于“android中怎么優(yōu)雅的從網(wǎng)絡(luò)加載點(diǎn)九圖”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“android中怎么優(yōu)雅的從網(wǎng)絡(luò)加載點(diǎn)九圖”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)頁(yè)題目:android中怎么優(yōu)雅的從網(wǎng)絡(luò)加載點(diǎn)九圖
本文路徑:http://www.dlmjj.cn/article/jjisjh.html