中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

android中怎么優雅的從網絡加載點九圖

發布時間:2022-01-11 17:06:06 來源:億速云 閱讀:215 作者:iii 欄目:大數據

這篇文章主要介紹了android中怎么優雅的從網絡加載點九圖的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇android中怎么優雅的從網絡加載點九圖文章都會有所收獲,下面我們一起來看看吧。

1 背景

1.1 什么是點九圖

其實點九圖和我們用的其他格式的圖沒有什么大的不同,只不過是在圖片的四周各增加了1px的純黑(#FF000000)的線進行標記。例如:

標記位置含義
左-黑線縱向拉伸區域
上-黑線橫向拉伸區域
右-黑線縱向顯示區域
下-黑線橫向顯示區域
1.2 Android是如何加載點九圖的

當我們將點九圖放在res目錄下,Android不是直接去加載點九圖的,而是在編譯的時候將其轉換成另一種格式,這種格式是將其四周的黑色像素保存在Bitmap類中的mNinePatchChunk的byte[]數組中,并去掉四周一像素的寬度;在使用的時候,當判斷mNinePatchChunk不為空且為9patchchunk,則將其構造為NinePatchDrawable,否則構造為BitmapDrawable,最終設置給view。所以,最后打包后的點九圖已經不是原來帶黑線的點九圖了。

2 使用方案

2.1 遇到的坑

如果沒做任何處理,當我們從服務端直接拉取點九的圖設置到我們的view上時,發現圖片并不會拉伸,并且圖片周圍的黑線也會顯示出來。從上1.2Android加載點九圖的原理可知,之所以出現這種問題,是因為我們少了編譯這一步,是直接拿原始的點九圖設置到view上的,所以才出現問題。 知道錯誤的原因后,我們可以做如下幾種方式處理:

  • 讓產品或者設計師先進行轉換后(轉換工具由開發提供)再上傳到服務器,這時客戶端再從服務端拉取到的就是編譯處理后的點九圖了

  • 將原始點九圖上傳到一個轉換平臺,平臺進行轉換后再上傳到服務器

  • 另外一種是客戶端拿到原始的點九圖后自行處理,根據加載的原理自行構造出NinePatchDrawable,這個過程放到客戶端渲染的時候顯然太耗時,不符合要求 我們以QQ的方案為例(第一種)來討論實現方案。

2.2 使用方案

先看下總的流程圖:

  android中怎么優雅的從網絡加載點九圖

使用上述方案的注意事項:

  • 步驟2畫黑線必須是純黑色像素,且圖片的四個角必須為透明像素點,否則Android無法識別,且在步驟3中將無法轉換

  • 步驟3中,可以使用Android SDK自帶工具aapt進行轉換:aapt c -v -S . -C .\output,其中.表示當前目錄,.\output表示目標目錄

  • 步驟4中,上傳過程中不能對轉換后的圖進行壓縮,因為轉換后的點九圖的黑線信息被保存到了png圖片的輔助數據快中,這部分數據在壓縮的過程中會消失,導致最終客戶端拉取到的圖片不是點九圖

  • 步驟4中,某些cdn因為省流量,或者其他原因,對圖片進行壓縮或者轉碼為webp格式,這樣會導致最終拉取到的圖片不是點九圖。

  • 步驟8中,需要通過Bitmap創建drawable,如果是使用res目錄下的,Android系統會自動完成,如果是獲取網絡圖片則需要自己手動創建,如下:

  • android中怎么優雅的從網絡加載點九圖

  • 步驟9中,一定要使用緩存,不然異步加載的過程中,在list中顯示會有問題,跳變很嚴重。

關于“android中怎么優雅的從網絡加載點九圖”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“android中怎么優雅的從網絡加載點九圖”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

赤峰市| 土默特左旗| 靖边县| 鄯善县| 南昌市| 苏尼特右旗| 繁昌县| 隆化县| 普兰县| 龙海市| 聂拉木县| 河源市| 左云县| 松桃| 崇仁县| 丽江市| 莱芜市| 永顺县| 左云县| 营山县| 宝山区| 太湖县| 宝丰县| 青铜峡市| 精河县| 枣强县| 兴和县| 新乡市| 抚松县| 偏关县| 洪雅县| 西青区| 普安县| 诸暨市| 北票市| 三原县| 无锡市| 略阳县| 哈尔滨市| 华亭县| 寻乌县|