本發(fā)明涉及智能終端領(lǐng)域,更為具體地,涉及用于對UI控件水幕顯示方法及裝置。
背景技術(shù):
水幕電影是通過高壓水泵和特制水幕發(fā)生器,將水自下而上高速噴出,水霧化后形成“銀幕”,由專用放映機(jī)將特制的錄影帶投射在“銀幕”上,形成水幕電影。觀眾在觀摩電影時(shí),水幕和自然夜空融為一體,畫面的立體感和空間感都給觀眾帶來非凡的視覺體驗(yàn)。用戶在使用終端時(shí),開始追求在終端上也能夠享受到這種水幕效果,為了滿足用戶對終端的需求,技術(shù)人員開始研究如何將水幕效果帶到終端的UI控件入場中。
在Android平臺(tái)上要實(shí)現(xiàn)水幕效果,首先想到使用Android自帶的動(dòng)畫接口,但Android自帶的動(dòng)畫接口是無法支持水幕效果的,因此,技術(shù)人員想到借助OpenGL-ES(嵌入式圖形開發(fā)庫)在底層來實(shí)現(xiàn)水幕效果,但由于OpenGL-ES的語言、構(gòu)架的復(fù)雜度較高,學(xué)習(xí)門檻較高,再者,OpenGL-ES語言與Android語言不同,在使用時(shí)其需要復(fù)雜的跨語言編譯和調(diào)用,致使其很難與AndroidUI控件相兼容,上述原因致使水幕效果目前還沒有在終端上得以實(shí)現(xiàn)。
技術(shù)實(shí)現(xiàn)要素:
鑒于上述問題,本發(fā)明提出了一種UI控件水幕入場顯示方法及裝置,以在終端上實(shí)現(xiàn)UI控件的水幕顯示效果,提高用戶的視覺體驗(yàn)。
一方面,本發(fā)明提供了一種UI控件水幕顯示方法,該方法包括:
控制UI控件視圖失效;
按照刷新幀率更新繪制矩陣;以及按照刷新幀率更新畫筆透明度值;
通過繪制函數(shù)循環(huán)調(diào)用所述繪制矩陣和畫筆透明度值的方式實(shí)現(xiàn)對UI控件的移動(dòng)繪制。
又一方面,本發(fā)明提供了一種UI控件水幕顯示裝置,該裝置包括:
失效控制單元,用于控制UI控件視圖失效;
繪制矩陣更新單元,用于按照刷新幀率更新繪制矩陣;
透明度值更新單元,用于按照刷新幀率更新畫筆透明度值;
繪制單元,用于通過繪制函數(shù)循環(huán)調(diào)用所述繪制矩陣和畫筆透明度值的方式實(shí)現(xiàn)對UI控件的移動(dòng)繪制。
與現(xiàn)有技術(shù)相比本發(fā)明具有如下有益效果:
本發(fā)明在UI控件入場時(shí),首先控制UI控件視圖失效;這樣使得UI控件一開始處于不可見狀態(tài),然后按照刷新幀率更新繪制矩陣以及更新畫筆透明度值;這樣基于系統(tǒng)的刷新幀率來更新繪制函數(shù)所需要的參數(shù),為繪制函數(shù)移動(dòng)繪制UI控件打好基礎(chǔ);最后,通過繪制函數(shù)循環(huán)調(diào)用所述繪制矩陣和畫筆透明度值的方式實(shí)現(xiàn)對UI控件的移動(dòng)繪制。本發(fā)明通過循環(huán)更新繪制矩陣和畫筆透明度值的方式,通過周期性調(diào)用繪制函數(shù)的方式對UI控件進(jìn)行移動(dòng)繪制,這樣能夠在終端上實(shí)現(xiàn)UI控件入場的水幕效果,以滿足用戶視覺體驗(yàn)。
附圖說明
為了更清楚地說明本申請實(shí)施例中的技術(shù)方案,下面將對實(shí)施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明UI控件水幕顯示方法的流程圖;
圖2是本發(fā)明UI控件水幕顯示過程的示意圖;
圖3是本發(fā)明UI控件水幕顯示效果的示意圖;
圖4是本發(fā)明UI控件水幕顯示裝置的結(jié)構(gòu)圖。
具體實(shí)施方式
下面描述本發(fā)明的各個(gè)方面。應(yīng)該明白的是,本文的教導(dǎo)可以以多種多樣形式具體體現(xiàn),并且在本文中公開的任何具體結(jié)構(gòu)、功能或兩者僅僅是代 表性的。基于本文的教導(dǎo),本領(lǐng)域技術(shù)人員應(yīng)該明白的是,本文所公開的一個(gè)方面可以獨(dú)立于任何其它方面實(shí)現(xiàn),并且這些方面中的兩個(gè)或多個(gè)方面可以按照各種方式組合。例如,可以使用本文所闡述的任何數(shù)目的方面,實(shí)現(xiàn)裝置或?qū)嵺`方法。另外,可以使用其它結(jié)構(gòu)、功能、或除了本文所闡述的一個(gè)或多個(gè)方面之外或不是本文所闡述的一個(gè)或多個(gè)方面的結(jié)構(gòu)和功能,實(shí)現(xiàn)這種裝置或?qū)嵺`這種方法。此外,本文所描述的任何方面可以包括權(quán)利要求的至少一個(gè)元素。
在描述本發(fā)明的各個(gè)實(shí)施例之前,要聲明的是,本發(fā)明適用于智能終端。這里所說的智能終端是指具有無線通信能力和計(jì)算處理能力的終端設(shè)備(在下文中統(tǒng)稱為終端設(shè)備),包括但不限于筆記本電腦、平板電腦、智能手機(jī)、個(gè)人數(shù)據(jù)助理(PDA)等等。
下面將參照附圖描述本發(fā)明的各個(gè)實(shí)施例。
參見圖1,圖1是本發(fā)明UI控件水幕顯示方法的流程圖,如圖1所示,該方法包括:
S101,控制UI控件視圖失效。
用戶使用智能終端時(shí),通過按壓開機(jī)鍵或home鍵的方式來觸發(fā)智能終端顯示UI控件。智能終端響應(yīng)于用戶觸發(fā)的UI控件顯示操作,先控制UI控制視圖失效,也就是強(qiáng)制UI控件一開始處于不可見狀態(tài)。在智能終端上UI控件的類型多種多樣,如文本控件、按鈕控件、狀態(tài)開關(guān)控件、圖片控件、時(shí)鐘控件、日期與時(shí)間選擇控件等。
步驟S101可以通過調(diào)用繪制函數(shù)的方式獲取UI控件的畫布,在畫布區(qū)域上繪制黑色蒙板,使UI控件處于不可見狀態(tài)。這樣先強(qiáng)制UI控件處于不可見狀態(tài),然后再通過下面的步驟循環(huán)調(diào)用繪制函數(shù)來實(shí)現(xiàn)水幕效果。
為了更形象地描述本發(fā)明的實(shí)現(xiàn)過程,請參照圖2示出的UI控件水幕顯示過程的示意圖,圖2中僅以圖片控件為例,圖2左邊示出的是待顯示的圖片控件,圖2右邊示出的是UI控件顯示過程結(jié)構(gòu)圖,Top是指UI控件的頂部,Bottom是指UI控件的底部,整個(gè)UI控件是從頂部到底部逐漸被顯示,繪制總時(shí)間Duration為1000ms。假設(shè)智能終端的UI刷新幀率為60幀每秒,則每1/60秒就通過下面的步驟調(diào)用一次繪制函數(shù)進(jìn)行繪制。當(dāng)然, 上述數(shù)值僅為示例性的,在具體實(shí)現(xiàn)時(shí),上述刷新幀率、繪制總時(shí)間都可根據(jù)實(shí)際場景來確定。
以圖片控件為例,上述步驟S101可以通過先獲取圖片控件的畫布canvas,將圖片控件作為畫布canvas;然后在畫布區(qū)域上繪制一個(gè)黑色蒙板,這樣就使得圖片控件一開始處于不可見狀態(tài)。步驟S101也可以通過調(diào)用invalite函數(shù)來強(qiáng)制UI控件視圖失效。
S102,按照刷新幀率更新繪制矩陣;以及按照刷新幀率更新畫筆透明度值。
在強(qiáng)制UI控件一開始處于不可見之后,就需要回調(diào)繪制函數(shù)Ondraw(Canvas canvas)方法對UI控件進(jìn)行繪制,而Canvas繪制涉及到兩個(gè)參數(shù),分別是繪制矩陣參數(shù)以及畫筆,因此,繪制矩陣參數(shù)和畫筆屬性值是繪制函數(shù)最重要的參數(shù),也是隨著繪制周期進(jìn)行變化的參數(shù)。
在執(zhí)行繪制時(shí),先調(diào)用StartAnimation函數(shù)來記錄動(dòng)畫的開始時(shí)間TimeStart,并調(diào)用OnDraw(Canvas canvas)來進(jìn)行重繪,OnDraw(Canvas canvas)函數(shù)需要循環(huán)調(diào)用繪制矩陣參數(shù)和畫筆透明度值,其中,繪制矩陣參數(shù)可以按照如下方式進(jìn)行循環(huán)更新:
按照刷新幀率通過調(diào)用繪制矩陣更新函數(shù)的方式更新繪制矩陣。
更進(jìn)一步地,該方式可以包括如下步驟:
按照刷新幀率,通過調(diào)用UI控件函數(shù)的方式獲取UI控件的高度和寬度;以及,通過調(diào)用矩陣類設(shè)置函數(shù)的方式更新繪制矩陣,所述繪制矩陣包括左端值、頂端值、右端值以及底端值;其中,左端值等于零,右端值等于所述寬度,底端值等于所述高度,頂端值是按照刷新幀率更新的,當(dāng)繪制時(shí)間比率小于1時(shí),設(shè)置頂端值等于繪制時(shí)間比率與所述高度的乘積,所述繪制時(shí)間比率等于繪制已執(zhí)行時(shí)間與繪制總時(shí)間的比值。
這里繪制矩陣更新函數(shù)為UpdateRect函數(shù),UpdateRect函數(shù)的實(shí)現(xiàn)原理如下:
首先,記錄當(dāng)前系統(tǒng)時(shí)間TimeNew,繪制已執(zhí)行時(shí)間TimePassed,TimePassed=TimeNew-TimeStart;然后,利用TimePassed除以繪制總時(shí)間Duration等于繪制時(shí)間比率TimeRate,即,TimeRate=TimePassed/Duration; 最后,通過循環(huán)獲取TimeRate的方式以循環(huán)更新繪制矩陣。在循環(huán)更新的過程中,需要先判斷TimeRate是否小于1,如果小于1,就利用TimeRate來進(jìn)行更新,如果不小于1則表明繪制矩陣已經(jīng)位于畫布的不可見區(qū)域,此時(shí)應(yīng)該結(jié)束繪制,UI控件的水幕入場動(dòng)畫結(jié)束。
另外,發(fā)明人還考慮了繪制速率逐漸變化時(shí),UI控件的水幕效果會(huì)更絢麗,其動(dòng)態(tài)效果更好?;诖?,發(fā)明人提出了優(yōu)選方案,即在得到上述TimeRate時(shí),對TimeRate進(jìn)行插值運(yùn)算,可通過調(diào)用插值函數(shù)interpolator.getInterpolation的方式得到插值時(shí)間比率interpolatedTimeRate,這里的插值函數(shù)可以采用線性插值、二次插值、樣條插值等插值算法來實(shí)現(xiàn)。后面的處理就以插值時(shí)間比率為基礎(chǔ)進(jìn)行處理。
其次,當(dāng)計(jì)算得到繪制時(shí)間比率時(shí),通過調(diào)用矩陣類設(shè)置函數(shù)的方式更新繪制矩陣,這里的矩陣類設(shè)置函數(shù)Rect.set(int left,int top,int right,int bottom)來對繪制矩陣進(jìn)行更新,更新得到當(dāng)前的繪制矩陣RectCurrent.set(0,TimeRate*(height),width,height)。如果計(jì)算得到插值時(shí)間比率時(shí),則更新得到當(dāng)前的繪制矩陣RectCurrent.set(0,interpolatedTimeRate*(height),width,height),其中,height、width是通過調(diào)用圖片控件函數(shù)的方式獲取的圖片控件的高度以及寬度。
另外,在每更新一次繪制矩陣的同時(shí)還需要更新一次畫筆透明度值,畫筆透明度值可以通過以下方式循環(huán)更新:
通過調(diào)用畫筆透明度值更新函數(shù)的方式實(shí)現(xiàn)對畫筆透明度值的更新,更新的原理包括:
按照刷新幀率,在預(yù)設(shè)的透明度取值范圍內(nèi)按照透明度值由最大值開始逐次減小預(yù)設(shè)步長的方式更新畫筆透明度值;或者,
按照刷新幀率,在預(yù)設(shè)的透明度取值范圍內(nèi)按照透明度值由最小值開始逐次增大預(yù)設(shè)步長的方式更新畫筆透明度值。
上述畫筆透明度值函數(shù)為paint.setAlpha(alpha),該函數(shù)的實(shí)現(xiàn)原理如下:預(yù)先設(shè)定透明度值aplha取值范圍(alphaMin,alphaMax)以及步長,其中,alphaMin為透明度值最小值,alphaMax為透明度值最大值,aplha從最大值開始每次遞減一個(gè)步長,或者,aplha從最小值開始每次遞增一個(gè)步長,這 樣畫筆透明度值以固定步長在alphaMax與alphaMin之間變化更新,透明度值的逐漸變化使得繪制出的UI控件呈現(xiàn)出水幕霧化效果,另外,在具體實(shí)現(xiàn)時(shí)還可以對畫筆的其他屬性值進(jìn)行更新,如對畫筆的顏色進(jìn)行更新。
最后,通過S103實(shí)現(xiàn)對UI控件的移動(dòng)繪制。
S103,通過繪制函數(shù)循環(huán)調(diào)用所述繪制矩陣和畫筆透明度值的方式實(shí)現(xiàn)對UI控件的移動(dòng)繪制。
這里的繪制函數(shù)OnDraw(Canvas canvas)采用的是
canvas.drawBitmap(Bitmap bitmap,Rect src,Rect dst,Paint paint)圖片繪畫函數(shù)來實(shí)現(xiàn)的,本發(fā)明具體調(diào)用繪制函數(shù)為:
canvas.drawBitmap(bitmap,null,rectCurrent,paint),其中,bitmap表示UI控件,null表示空,rectCurrent表示更新的當(dāng)前繪制矩陣,paint表示更新的畫筆,在本實(shí)施例中僅對畫筆的透明度值進(jìn)行更新,通過調(diào)用該繪制函數(shù)以實(shí)現(xiàn)對UI控件的移動(dòng)繪制,可以參照圖2理解為是對黑色蒙板在坐標(biāo)top與bottom的視圖可見區(qū)域進(jìn)行移動(dòng)繪制。
按照刷新幀率循環(huán)調(diào)用繪制函數(shù),繪制函數(shù)具體調(diào)用畫布的圖片繪制函數(shù)來進(jìn)行實(shí)現(xiàn),而圖片繪制函數(shù)里的繪制矩陣和畫筆透明度值也是隨著刷新幀率進(jìn)行更新,以使得繪制函數(shù)按照刷新幀率逐漸地將UI控件繪制出來,使得UI控件入場呈現(xiàn)出水幕效果。具體顯示效果可以參見圖3示出的示意圖。
通過上述實(shí)施例可以看出本發(fā)明通過在終端上采用繪制機(jī)制,按照刷新幀率更新繪制矩陣和畫筆透明度值的方式為繪制函數(shù)提供所需參數(shù),以從上到下,從無到有,并伴隨視圖透明度漸變地方式顯示UI控件,巧妙地在終端上實(shí)現(xiàn)UI控件入場的水幕動(dòng)畫效果,以滿足用戶在終端上享受水幕動(dòng)畫的需求,提高用戶體驗(yàn)。
與上述方法相對應(yīng)的,本發(fā)明提供了一種UI控件水幕顯示裝置。下面對本發(fā)明提供的裝置進(jìn)行解釋說明。
參見圖4,圖4是本發(fā)明UI控件水幕顯示裝置的結(jié)構(gòu)圖,如圖4所示,該裝置包括:
失效控制單元401,用于控制UI控件視圖失效;
繪制矩陣更新單元402,用于按照刷新幀率更新繪制矩陣;
透明度值更新單元403,用于按照刷新幀率更新畫筆透明度值;
繪制單元404,用于通過繪制函數(shù)循環(huán)調(diào)用所述繪制矩陣和畫筆透明度值的方式實(shí)現(xiàn)對UI控件的移動(dòng)繪制。
優(yōu)選的,所述繪制矩陣更新單元具體用于通過調(diào)用繪制矩陣更新函數(shù)的方式更新繪制矩陣。
優(yōu)選的,所述繪制矩陣更新單元包括:
獲取子單元,用于按照刷新幀率,通過調(diào)用UI控件函數(shù)的方式獲取UI控件的高度和寬度;
更新子單元,用于通過調(diào)用矩陣類設(shè)置函數(shù)的方式更新繪制矩陣,所述繪制矩陣包括左端值、頂端值、右端值以及底端值;其中,左端值等于零,右端值等于所述寬度,底端值等于所述高度,頂端值是按照刷新幀率更新的,當(dāng)繪制時(shí)間比率小于1時(shí),設(shè)置頂端值等于繪制時(shí)間比率與所述高度的乘積,所述繪制時(shí)間比率等于繪制已執(zhí)行時(shí)間與繪制總時(shí)間的比值。
優(yōu)選的,所述更新子單元還用于:
對所述繪制時(shí)間比率進(jìn)行插值運(yùn)算得到插值時(shí)間比率,則設(shè)置頂端值等于插值時(shí)間比率與所述高度的乘積。
優(yōu)選的,所述透明度值更新單元具體用于按照刷新幀率,在預(yù)設(shè)的透明度取值范圍內(nèi),按照透明度值由最大值開始逐次減小預(yù)設(shè)步長的方式更新畫筆透明度值;或者,
所述透明度值更新單元具體用于按照刷新幀率,在預(yù)設(shè)的透明度取值范圍內(nèi)按照透明度值由最小值開始逐次增大預(yù)設(shè)步長的方式更新畫筆透明度值。
優(yōu)選的,所述失效控制單元具體用于通過調(diào)用繪制函數(shù)的方式獲取UI控件的畫布,在畫布區(qū)域上繪制黑色蒙板,使UI控件處于不可見狀態(tài)。
本發(fā)明的裝置可以應(yīng)用于智能終端中,這樣使得智能終端在顯示UI控件時(shí),通過函數(shù)調(diào)用的方式,按照刷新幀率更新繪制矩陣和畫筆透明度值的方式實(shí)現(xiàn)對UI控件的水幕顯示,以滿足用戶在終端上享受水幕動(dòng)畫的需求,以提高用戶體驗(yàn)。
此外,根據(jù)本發(fā)明的方法還可以被實(shí)現(xiàn)為由智能終端中的處理器(比如CPU)執(zhí)行的計(jì)算機(jī)程序,并且存儲(chǔ)在智能終端的存儲(chǔ)器中。在該計(jì)算機(jī)程序被處理器執(zhí)行時(shí),處理器執(zhí)行本發(fā)明的方法中限定的上述功能。例如,根據(jù)本發(fā)明的移動(dòng)終端可以被實(shí)現(xiàn)為一個(gè)或多個(gè)處理器,以及與該一個(gè)或多個(gè)處理器相連的存儲(chǔ)器,該存儲(chǔ)器中存儲(chǔ)具有可以使得處理器執(zhí)行本發(fā)明的方法中所限定的各個(gè)步驟的指令的計(jì)算機(jī)程序。
此外,應(yīng)該明白的是,本文所述的計(jì)算機(jī)可讀存儲(chǔ)設(shè)備(例如,存儲(chǔ)器)可以是易失性存儲(chǔ)器或非易失性存儲(chǔ)器,或者可以包括易失性存儲(chǔ)器和非易失性存儲(chǔ)器兩者。作為例子而非限制性的,非易失性存儲(chǔ)器可以包括只讀存儲(chǔ)器(ROM)、可編程ROM(PROM)、電可編程ROM(EPROM)、電可擦寫可編程ROM(EEPROM)或快閃存儲(chǔ)器。易失性存儲(chǔ)器可以包括隨機(jī)存取存儲(chǔ)器(RAM),該RAM可以充當(dāng)外部高速緩存存儲(chǔ)器。作為例子而非限制性的,RAM可以以多種形式獲得,比如同步RAM(DRAM)、動(dòng)態(tài)RAM(DRAM)、同步DRAM(SDRAM)、雙數(shù)據(jù)速率SDRAM(DDRSDRAM)、增強(qiáng)SDRAM(ESDRAM)、同步鏈路DRAM(SLDRAM)以及直接RambusRAM(DRRAM)。所公開的方面的存儲(chǔ)設(shè)備意在包括但不限于這些和其它合適類型的存儲(chǔ)器。
此外,根據(jù)本發(fā)明的方法還可以實(shí)現(xiàn)為一種計(jì)算機(jī)程序產(chǎn)品,該計(jì)算機(jī)程序產(chǎn)品包括計(jì)算機(jī)可讀介質(zhì),在該計(jì)算機(jī)可讀介質(zhì)上存儲(chǔ)有用于執(zhí)行本發(fā)明的方法中限定的上述功能的計(jì)算機(jī)程序。
此外,上述方法步驟以及單元也可以利用控制器以及用于存儲(chǔ)使得控制器實(shí)現(xiàn)上述步驟或單元功能的計(jì)算機(jī)程序的計(jì)算機(jī)可讀存儲(chǔ)設(shè)備實(shí)現(xiàn)。
本領(lǐng)域技術(shù)人員還將明白的是,結(jié)合這里的公開所描述的各種示例性邏輯塊、模塊、電路和算法步驟可以被實(shí)現(xiàn)為電子硬件、計(jì)算機(jī)軟件或兩者的組合。為了清楚地說明硬件和軟件的這種可互換性,已經(jīng)就各種示意性組件、方塊、模塊、電路和步驟的功能對其進(jìn)行了一般性的描述。這種功能是被實(shí)現(xiàn)為軟件還是被實(shí)現(xiàn)為硬件取決于具體應(yīng)用以及施加給整個(gè)系統(tǒng)的設(shè)計(jì)約束。本領(lǐng)域技術(shù)人員可以針對每種具體應(yīng)用以各種方式來實(shí)現(xiàn)所述的功能,但是這種實(shí)現(xiàn)決定不應(yīng)被解釋為導(dǎo)致脫離本發(fā)明的范圍。
盡管前面公開的內(nèi)容示出了本發(fā)明的示例性實(shí)施例,但是應(yīng)當(dāng)注意,在不背離權(quán)利要求限定的本發(fā)明的范圍的前提下,可以進(jìn)行多種改變和修改。根據(jù)這里描述的發(fā)明實(shí)施例的方法權(quán)利要求的功能、步驟和/或動(dòng)作不需以任何特定順序執(zhí)行。此外,盡管本發(fā)明的元素可以以個(gè)體形式描述或要求,但是也可以設(shè)想多個(gè),除非明確限制為單數(shù)。
雖然如上參照圖描述了根據(jù)本發(fā)明的各個(gè)實(shí)施例進(jìn)行了描述,但是本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,對上述本發(fā)明所提出的各個(gè)實(shí)施例,還可以在不脫離本發(fā)明內(nèi)容的基礎(chǔ)上做出各種改進(jìn)。因此,本發(fā)明的保護(hù)范圍應(yīng)當(dāng)由所附的權(quán)利要求書的內(nèi)容確定。