本發(fā)明涉及Android資源圖片的優(yōu)化領(lǐng)域,具體涉及一種優(yōu)化Android資源圖片的方法及系統(tǒng)。
背景技術(shù):
當(dāng)前Android系統(tǒng)開發(fā)中,隨著業(yè)務(wù)需求的不斷增多,Android應(yīng)用安裝包的大小也在逐步增大;安裝包中的圖片資源文件的格式一般為光柵文件格式(例如GIF、JPEG),由于不同類型的智能手機(jī)中的資源圖片的尺寸不同,而且光柵文件格式的圖片資源文件縮放后會(huì)破壞圖像的清晰度,因此Android系統(tǒng)的安裝包中需要放置多套尺寸不同的圖片資源文件,進(jìn)而匹配不同類型的智能手機(jī)。
但是,因?yàn)閳D片的存儲(chǔ)單位是圖像上每一點(diǎn)的像素值,所以圖片資源文件的容量很大,而放置多套圖片資源文件會(huì)占用大量的網(wǎng)絡(luò)帶寬,進(jìn)而降低智能手機(jī)的性能。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明解決的技術(shù)問題為:將資源圖片轉(zhuǎn)換為svg格式后進(jìn)行解析和重新繪制。本發(fā)明重新繪制后的資源圖片在縮放時(shí),能夠保證圖片的清晰度,進(jìn)而保證了智能手機(jī)的性能。
為達(dá)到以上目的,本發(fā)明提供的優(yōu)化Android資源圖片的方法,包括以下步驟:
步驟A:將需要優(yōu)化的資源圖片轉(zhuǎn)換為svg格式的xml轉(zhuǎn)換文件,轉(zhuǎn)到步驟B01;
步驟B01:當(dāng)所述資源圖片為靜態(tài)圖片時(shí),獲取xml轉(zhuǎn)換文件的圖片數(shù)據(jù)和顏色值,分別對(duì)圖片數(shù)據(jù)和顏色值設(shè)置唯一id后保存,轉(zhuǎn)到步驟B02;
步驟B02:創(chuàng)建與靜態(tài)圖片名稱對(duì)應(yīng)的xml格式的靜態(tài)圖片顯示文件,在靜態(tài)圖片顯示文件中新建圖片填充顏色屬性和圖片形狀屬性;為填充顏色屬性創(chuàng)建與步驟B01中所述顏色值相同的唯一id,為圖片形狀屬性創(chuàng)建與步驟B01中所述圖片數(shù)據(jù)相同的唯一id,轉(zhuǎn)到步驟B03;
步驟B03:加載靜態(tài)圖片顯示文件,當(dāng)加載到填充顏色屬性和圖片形狀屬性時(shí),查找與填充顏色屬性的唯一id相同的顏色值,查找與圖片形狀屬性的唯一id相同的圖片數(shù)據(jù);根據(jù)查找到的顏色值和圖片數(shù)據(jù),渲染生成svg格式的資源圖片。
與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)在于:
(1)本發(fā)明將資源圖片轉(zhuǎn)換為svg格式后進(jìn)行解析和重新繪制,因此與現(xiàn)有技術(shù)中光柵文件格式的資源圖片相比,本發(fā)明能夠?qū)ndroid應(yīng)用安裝包的資源圖片格式變?yōu)閟vg格式,svg格式的資源圖片在縮放時(shí)能夠保證圖片的清晰度,進(jìn)而保證了智能手機(jī)的性能。
(2)本發(fā)明重新繪制的靜態(tài)圖片能夠替換顏色值和圖片數(shù)據(jù),進(jìn)而能夠隨時(shí)更新靜態(tài)圖片,進(jìn)一步增加了資源圖片的優(yōu)化效果。
(3)本發(fā)明重新繪制的資源圖片以字符串的形式存在,與圖片資源相比,字符串占用的空間非常下,進(jìn)而提高了智能手機(jī)的性能。
附圖說明
圖1為本發(fā)明實(shí)施例中優(yōu)化Android資源圖片的方法的流程圖。
具體實(shí)施方式
以下結(jié)合附圖及實(shí)施例對(duì)本發(fā)明作進(jìn)一步詳細(xì)說明。
參見圖1所示,本發(fā)明實(shí)施例中的優(yōu)化Android資源圖片的方法,包括以下流程:
S1:利用圖片轉(zhuǎn)換工具(例如Photoshop),將需要優(yōu)化的資源圖片轉(zhuǎn)換為svg格式(Scalable Vector Graphics,可縮放矢量圖形格式)的xml轉(zhuǎn)換文件。
S2:確認(rèn)xml轉(zhuǎn)換文件中資源圖片的類型,若資源圖片為靜態(tài)圖片,轉(zhuǎn)到S3,若資源圖片為動(dòng)態(tài)圖片,轉(zhuǎn)到S4。
S3:對(duì)靜態(tài)圖片的xml轉(zhuǎn)換文件進(jìn)行解析、并在Android中進(jìn)行繪制,具體流程為:
S301:獲取xml轉(zhuǎn)換文件的path(環(huán)境變量)標(biāo)簽,從path標(biāo)簽中獲取圖片數(shù)據(jù)(pathdata,使用圖片數(shù)據(jù)可得到圖片的原始形狀)和對(duì)應(yīng)的顏色值(storkecolor,使用顏色值進(jìn)行繪制就可以得到該圖片的完整圖像),分別對(duì)圖片數(shù)據(jù)和顏色值設(shè)置唯一id后,將設(shè)置有唯一id圖片數(shù)據(jù)和顏色值放入Android系統(tǒng)的字符串中集中,轉(zhuǎn)到302。
S302:Android應(yīng)用在開發(fā)時(shí),會(huì)在drawable下創(chuàng)建與靜態(tài)圖片名稱對(duì)應(yīng)的xml格式的靜態(tài)圖片顯示文件,在靜態(tài)圖片顯示文件中定義1個(gè)vector(矢量)標(biāo)簽(該標(biāo)簽就是需要生成的圖片的長寬數(shù)據(jù))。在vector標(biāo)簽中創(chuàng)建1個(gè)path標(biāo)簽,在path標(biāo)簽中新建圖片填充顏色(fillcolor)屬性和圖片形狀屬性;為填充顏色屬性創(chuàng)建與S301中顏色值相同的唯一id,為圖片形狀屬性創(chuàng)建與S301中圖片數(shù)據(jù)相同的唯一id,轉(zhuǎn)到S303。
S303:加載靜態(tài)圖片顯示文件,當(dāng)加載到填充顏色屬性和圖片形狀屬性時(shí),在Android系統(tǒng)的字符串中,查找與填充顏色屬性的唯一id相同的顏色值,查找與圖片形狀屬性的唯一id相同的圖片數(shù)據(jù);根據(jù)查找到的顏色值和圖片數(shù)據(jù),渲染生成可以識(shí)別的svg格式的資源圖片,轉(zhuǎn)到S304。
S304:使用Android自帶的Imageview的src標(biāo)簽去加載生成svg格式的資源圖片。當(dāng)需要根據(jù)服務(wù)器所設(shè)置的需求更換圖片時(shí),S304的具體工作流程為:向服務(wù)器請(qǐng)求獲取資源圖片信息,圖片信息包括以字符串形式存在的顏色值和圖片數(shù)據(jù);判斷服務(wù)器返回的顏色值和圖片數(shù)據(jù),是否與本地資源圖片的顏色值和圖片數(shù)據(jù)相同,若是,直接顯示本地的資源圖片,否則將本地資源圖片的顏色值和圖片數(shù)據(jù),替換為服務(wù)器返回的顏色值和圖片數(shù)據(jù)后再進(jìn)行顯示。
S4:對(duì)動(dòng)態(tài)圖片的xml轉(zhuǎn)換文件進(jìn)行解析、并在Android中進(jìn)行繪制,具體流程為:
S401:獲取xml轉(zhuǎn)換文件的每一幅動(dòng)態(tài)圖片的圖片數(shù)據(jù),為每幅圖片數(shù)據(jù)設(shè)置1個(gè)唯一名稱(name),轉(zhuǎn)到S402。
S402:在drawable下創(chuàng)建動(dòng)態(tài)圖片的xml格式的動(dòng)畫效果文件;在動(dòng)畫效果文件獲取所有動(dòng)畫片段的軌跡數(shù)據(jù)(獲取方式為在Android的animator中,使用“@animator/動(dòng)畫文件名”來獲取),根據(jù)S401中的唯一名稱,確定與每段軌跡數(shù)據(jù)相應(yīng)的圖片數(shù)據(jù),轉(zhuǎn)到S403。
S403:在每段軌跡數(shù)據(jù)中設(shè)置動(dòng)畫的時(shí)間長度(android:duration,單位為毫秒)和屬性(trimPathEnd,表示繪制由開始點(diǎn)到繪制結(jié)束點(diǎn));由字符串生成的軌跡數(shù)據(jù)省去了圖片資源所占的空間,轉(zhuǎn)到S404。
S404:使用Android的AnimatedVectorDrawable建立動(dòng)畫模型,在動(dòng)畫模型中加載所有軌跡數(shù)據(jù)和相應(yīng)的圖片數(shù)據(jù),將所有軌跡數(shù)據(jù)在時(shí)序上相關(guān)聯(lián),將所有圖片數(shù)據(jù)在時(shí)序上相關(guān)聯(lián);將關(guān)聯(lián)后的所有軌跡數(shù)據(jù)和所有圖片數(shù)據(jù)形成動(dòng)畫播放文件。將動(dòng)畫播放文件加載至Android的imageview,即可進(jìn)行播放。
本發(fā)明實(shí)施例提供的實(shí)現(xiàn)上述方法的優(yōu)化Android資源圖片的系統(tǒng),包括svg格式轉(zhuǎn)換模塊、靜態(tài)參數(shù)獲取模塊、靜態(tài)顯示文件創(chuàng)建模塊、靜態(tài)圖片加載模塊、靜態(tài)圖片替換模塊、動(dòng)態(tài)參數(shù)獲取模塊、動(dòng)態(tài)軌跡數(shù)據(jù)獲取模塊、動(dòng)畫參數(shù)設(shè)置模塊和動(dòng)畫加載模塊。
svg格式轉(zhuǎn)換模塊用于:將需要優(yōu)化的資源圖片轉(zhuǎn)換為svg格式的xml轉(zhuǎn)換文件,當(dāng)資源圖片為靜態(tài)圖片時(shí),向靜態(tài)參數(shù)獲取模塊發(fā)送靜態(tài)參數(shù)獲取信號(hào);當(dāng)資源圖片為動(dòng)態(tài)圖片時(shí),向動(dòng)態(tài)參數(shù)獲取模塊發(fā)送動(dòng)態(tài)參數(shù)獲取信號(hào)。
靜態(tài)參數(shù)獲取模塊用于:收到靜態(tài)參數(shù)獲取信號(hào)后,獲取xml轉(zhuǎn)換文件的圖片數(shù)據(jù)和顏色值,分別對(duì)圖片數(shù)據(jù)和顏色值設(shè)置唯一id后放入Android系統(tǒng)的字符串中,向靜態(tài)顯示文件創(chuàng)建模塊發(fā)送靜態(tài)顯示文件創(chuàng)建信號(hào)。
靜態(tài)顯示文件創(chuàng)建模塊用于:收到靜態(tài)顯示文件創(chuàng)建信號(hào)后,創(chuàng)建與靜態(tài)圖片名稱對(duì)應(yīng)的xml格式的靜態(tài)圖片顯示文件,在靜態(tài)圖片顯示文件中新建圖片填充顏色屬性和圖片形狀屬性;為填充顏色屬性創(chuàng)建與靜態(tài)參數(shù)獲取模塊中顏色值相同的唯一id,為圖片形狀屬性創(chuàng)建與靜態(tài)參數(shù)獲取模塊中圖片數(shù)據(jù)相同的唯一id,向靜態(tài)圖片加載模塊發(fā)送靜態(tài)圖片加載信號(hào)。
靜態(tài)圖片加載模塊用于:收到靜態(tài)圖片加載信號(hào)后,加載靜態(tài)圖片顯示文件,當(dāng)加載到填充顏色屬性和圖片形狀屬性時(shí),在Android系統(tǒng)的字符串中查找與填充顏色屬性的唯一id相同的顏色值,查找與圖片形狀屬性的唯一id相同的圖片數(shù)據(jù);根據(jù)查找到的顏色值和圖片數(shù)據(jù),渲染生成svg格式的資源圖片。
靜態(tài)圖片替換模塊用于:在靜態(tài)圖片加載模塊工作完成之后,向服務(wù)器請(qǐng)求獲取資源圖片信息,資源圖片信息包括顏色值和圖片數(shù)據(jù);判斷服務(wù)器返回的顏色值和圖片數(shù)據(jù),是否與本地資源圖片的顏色值和圖片數(shù)據(jù)相同,若是,直接顯示本地的資源圖片,否則將本地資源圖片的顏色值和圖片數(shù)據(jù),替換為服務(wù)器返回的顏色值和圖片數(shù)據(jù)后再進(jìn)行顯示。
動(dòng)態(tài)參數(shù)獲取模塊用于:收到動(dòng)態(tài)參數(shù)獲取信號(hào)后,獲取xml轉(zhuǎn)換文件的每一幅動(dòng)態(tài)圖片的圖片數(shù)據(jù),為每幅圖片數(shù)據(jù)設(shè)置1個(gè)唯一名稱,向動(dòng)態(tài)軌跡數(shù)據(jù)獲取模塊發(fā)送動(dòng)態(tài)軌跡數(shù)據(jù)獲取信號(hào)。
動(dòng)態(tài)軌跡數(shù)據(jù)獲取模塊用于:收到動(dòng)態(tài)軌跡數(shù)據(jù)獲取信號(hào)后,創(chuàng)建動(dòng)態(tài)圖片的xml格式的動(dòng)畫效果文件;在動(dòng)畫效果文件獲取所有動(dòng)畫片段的軌跡數(shù)據(jù),根據(jù)動(dòng)態(tài)參數(shù)獲取模塊中所述唯一名稱,確定與每段軌跡數(shù)據(jù)相應(yīng)的圖片數(shù)據(jù),向動(dòng)畫參數(shù)設(shè)置模塊發(fā)送動(dòng)畫參數(shù)設(shè)置信號(hào)。
動(dòng)畫參數(shù)設(shè)置模塊用于:收到動(dòng)畫參數(shù)設(shè)置信號(hào)后,在每段軌跡數(shù)據(jù)中設(shè)置動(dòng)畫的時(shí)間長度和屬性,向動(dòng)畫加載模塊發(fā)送動(dòng)畫加載信號(hào)。
動(dòng)畫加載模塊用于:收到動(dòng)畫加載信號(hào)后,建立動(dòng)畫模型,在動(dòng)畫模型中加載所有軌跡數(shù)據(jù)和相應(yīng)的圖片數(shù)據(jù),將所有軌跡數(shù)據(jù)在時(shí)序上相關(guān)聯(lián),將所有圖片數(shù)據(jù)在時(shí)序上相關(guān)聯(lián);將關(guān)聯(lián)后的所有軌跡數(shù)據(jù)和所有圖片數(shù)據(jù)形成動(dòng)畫播放文件。
進(jìn)一步,本發(fā)明不局限于上述實(shí)施方式,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也視為本發(fā)明的保護(hù)范圍之內(nèi)。本說明書中未作詳細(xì)描述的內(nèi)容屬于本領(lǐng)域?qū)I(yè)技術(shù)人員公知的現(xiàn)有技術(shù)。