本發(fā)明涉及安卓系統(tǒng)技術(shù)領(lǐng)域,特別涉及一種基于同步信號的動畫繪制方法及系統(tǒng)。
背景技術(shù):
隨著互聯(lián)網(wǎng)技術(shù)的方案,形形色色的電子設備越來越受到消費者青睞。而在這些電子系統(tǒng)中,安卓(Android)系統(tǒng)是使用最為廣泛的一種系統(tǒng)。安卓系統(tǒng)在繪制動畫時普遍采用基于時間的插值方法進行動畫插值。所述基于時間的插值方法指的是在系統(tǒng)內(nèi)按照相同的時間間隔進行均勻插值。但是,所述基于時間的插值方法,當系統(tǒng)出現(xiàn)卡頓時,系統(tǒng)內(nèi)運行的插值操作也會相應的出現(xiàn)卡頓不能均勻插值,而使得顯示給用戶的畫面出現(xiàn)卡頓的問題。
因而現(xiàn)有技術(shù)還有待改進和提高。
技術(shù)實現(xiàn)要素:
本發(fā)明要解決的技術(shù)問題在于,針對現(xiàn)有技術(shù)的不足,提供一種基于同步信號的動畫繪制方法,以解決現(xiàn)有動畫繪制中采用基于時間插值方法存在的由于系統(tǒng)出現(xiàn)卡頓而產(chǎn)生的插值不均勻,使得顯示給用戶的畫面出現(xiàn)卡頓的問題。
為了解決上述技術(shù)問題,本發(fā)明所采用的技術(shù)方案如下:
一種基于同步信號的動畫繪制方法,其包括:
當接收到繪制動畫的指令時,通過Choreographer模塊監(jiān)聽系統(tǒng)的同步信號,其中,所述同步信號為系統(tǒng)進行動畫渲染時顯示器的刷新信號;
當監(jiān)聽到所述同步信號時,調(diào)用Choreographer模塊的FrameCallback接口進行插值操作。
所述基于同步信號的動畫繪制方法,其中,所述當接收到繪制動畫的指令時,通過Choreographer模塊監(jiān)聽系統(tǒng)的同步信號之前包括:
當檢測到終端設備啟動應用程序時,獲取Android系統(tǒng)的Choreographer模塊,并將所述Choreographer模塊配置于所述應用的主線程消息列隊。
所述基于同步信號的動畫繪制方法,其中,所述當監(jiān)聽到所述同步信號時,調(diào)用Choreographer模塊的FrameCallback接口進行插值操作之后還包括:
獲取所述當前插值操作與上一次插值操作的時間間隔,并將所述時間間隔與預設時間段進行比較;
當所述時間間隔大于所述預設時間段時,調(diào)用Choreographer模塊的FrameCallback接口進行預設次數(shù)插值操作。
所述基于同步信號的動畫繪制方法,其中,所述當所述時間間隔大于所述預設時間段時,調(diào)用Choreographer模塊的FrameCallback接口進行預設次數(shù)插值操作具體為:
當所述時間間隔大于所述預設時間段時,根據(jù)預設預設時間段與插值次數(shù)的對應關(guān)系確定進行插值的次數(shù);
調(diào)用Choreographer模塊的FrameCallback接口進行預設次數(shù)的插值。
所述基于同步信號的動畫繪制方法,其中,所述FrameCallback接口預設配置循環(huán)插值操作指令。
一種基于同步信號的動畫繪制系統(tǒng),其包括:
監(jiān)聽模塊,用于當接收到繪制動畫的指令時,通過Choreographer模塊監(jiān)聽系統(tǒng)的同步信號,其中,所述同步信號為顯示器刷新所產(chǎn)生的信號;
插值模塊,用于當監(jiān)聽到所述同步信號時,調(diào)用Choreographer模塊的FrameCallback接口進行插值操作。
所述基于同步信號的動畫繪制系統(tǒng),其還包括:
獲取模塊,用于當檢測到終端設備啟動應用程序時,獲取Android系統(tǒng)的Choreographer模塊,并將所述Choreographer模塊配置于所述應用的主線程消息列隊。
所述基于同步信號的動畫繪制系統(tǒng),其還包括:
比較模塊,用于獲取所述當前插值操作與上一次插值操作的時間間隔,并將所述時間間隔與預設時間段進行比較;
第二插值模塊,用于當所述時間間隔大于所述預設時間段時,調(diào)用Choreographer模塊的FrameCallback接口進行預設次數(shù)插值操作。
所述基于同步信號的動畫繪制系統(tǒng),其中,所述第二插值模塊具體包括:
確定單元,用于當所述時間間隔大于所述預設時間段時,根據(jù)預設預設時間段與插值次數(shù)的對應關(guān)系確定進行插值的次數(shù);
插值單元,用于調(diào)用Choreographer模塊的FrameCallback接口進行預設次數(shù)的插值。
所述基于同步信號的動畫繪制系統(tǒng),其中,所述FrameCallback接口預設配置循環(huán)插值操作指令。
有益效果:與現(xiàn)有技術(shù)相比,本發(fā)明提供了一種基于同步信號的動畫繪制方法及系統(tǒng),所述方法包括:當接收到繪制動畫的指令時,通過Choreographer模塊監(jiān)聽系統(tǒng)的同步信號,其中,所述同步信號為系統(tǒng)進行動畫渲染時顯示器的刷新信號;當監(jiān)聽到所述同步信號時,調(diào)用Choreographer模塊的FrameCallback接口進行插值操作。本發(fā)明通過基于顯示器刷新的同步信號進行插值操作,當系統(tǒng)卡頓時,系統(tǒng)仍然發(fā)送同步信息,系統(tǒng)根據(jù)所述同步信息進行插值操作,避免了由于系統(tǒng)出現(xiàn)卡頓而產(chǎn)生的插值不均勻,使得顯示給用戶的畫面出現(xiàn)卡頓的問題。
附圖說明
圖1為本發(fā)明提供的基于同步信號的動畫繪制較佳實施的流程圖。
圖2為本發(fā)明提供的基于同步信號的動畫繪制系統(tǒng)的結(jié)構(gòu)原理圖。
具體實施方式
本發(fā)明提供一種基于同步信號的動畫繪制方法及系統(tǒng),為使本發(fā)明的目的、技術(shù)方案及效果更加清楚、明確,以下參照附圖并舉實施例對本發(fā)明進一步詳細說明。應當理解,此處所描述的具體實施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明中,使用用于表示元件的諸如“模塊”、“部件”或“單元”的后綴僅為了有利于本發(fā)明的說明,其本身并沒有特定的意義。因此,模塊”、“部件”或“單元”可以混合地使用。
本發(fā)明所述方法可以用于具有Android系統(tǒng)的終端設備,所述終端設備可以以各種形式來實施。例如,本發(fā)明中描述的終端可以包括諸如移動電話、智能電話、筆記本電腦、數(shù)字廣播接收器、PDA(個人數(shù)字助理)、PAD(平板電腦)、PMP(便攜式多媒體播放器)、導航裝置等等的移動終端以及諸如數(shù)字TV、臺式計算機等等的固定終端。然而,本領(lǐng)域技術(shù)人員將理解的是,除了特別用于移動目的的元件之外,根據(jù)本發(fā)明的實施方式的構(gòu)造也能夠應用于固定類型的終端。
下面結(jié)合附圖,通過對實施例的描述,對發(fā)明內(nèi)容作進一步說明。
請參照圖1,圖1為本發(fā)明提供的基于同步信號的動畫繪制方法的較佳實施例的流程圖。所述方法包括:
S100、當接收到繪制動畫的指令時,通過Choreographer模塊監(jiān)聽系統(tǒng)的同步信號,其中,所述同步信號為系統(tǒng)進行動畫渲染時顯示器的刷新信號。
具體地,所述Choreographer模塊為一個消息處理器,用于根據(jù)同步信號(vsync,vertical synchronization)執(zhí)行回調(diào)算法。所述回調(diào)算法包括事件回調(diào)方法、動畫回調(diào)方法和繪制回調(diào)方法。在本實施例中,當加入動畫時將加入動畫的動作發(fā)送給Choreographer模塊,Choreographer模塊根據(jù)加入動畫的動作開啟接收同步信息。其中,所述同步信號vsync與顯示器的幀數(shù)同步,也就是說所述同步信號為顯示器刷新所產(chǎn)生的信號。
所述當接收到繪制動畫的指令時值得是終端設備啟動動畫繪制功能,例如,啟動需要繪制動畫的應用APP、終端本身需要繪制動畫等。
在本實施例中,由于終端設備裝載的APP不能直接調(diào)用系統(tǒng)的Choreographer模塊,從而在終端設備啟動APP時包括一個調(diào)用步驟,具體可以為:
當終端設備啟動時,監(jiān)聽終端設備啟動應用程序操作;
當監(jiān)聽到終端設備啟動應用程序的操作時,獲取系統(tǒng)的Choreographer模塊,并將所述Choreographer模塊配置于所述應用的主線程消息列隊。
具體地,當終端設備啟動時,在終端啟動的所有應用的主線程消息列隊中添加所述Choreographer模塊,用于當應用程序進行動畫繪制時通過Choreographer模塊接收同步信號,根據(jù)所述同步信息進行動畫插值。這樣可以保證終端設備安裝的所用應用程序動畫插值與顯示器的幀數(shù)同步,避免了由于系統(tǒng)出現(xiàn)卡頓而產(chǎn)生的插值不均勻,使得顯示給用戶的畫面出現(xiàn)卡頓的問題。
S200、當監(jiān)聽到所述同步信號時,調(diào)用Choreographer模塊的FrameCallback接口進行插值操作。
具體地,所述FrameCallback接口為Choreographer模塊提供的提供的回調(diào)方法類;用于根據(jù)同步信號采用回調(diào)方法進行動畫插值。也就是說,當接收到同步信號時,通過Choreographer模塊的FrameCallback接口,根據(jù)同步信號采用回調(diào)方法進行動畫插值。所述回調(diào)方法是采用安卓系統(tǒng)的消息機制,即提前將所述回調(diào)方法設置給應用的主線程的消息隊列,當接收同步信號時,回調(diào)所述FrameCallback接口。
所述FrameCallback接口預設配置循環(huán)插值操作指令,來實現(xiàn)多少插值,解決所述FrameCallback配置所述回調(diào)方法時僅能進行一次插值操作,不能重復調(diào)用多次才可插值完成的問題。在本實施例中,所述FrameCallback接口用遞歸的方式,即在FrameCallback中再配置一個FrameCallback,實現(xiàn)FrameCallback接口的循環(huán)配置,這樣就保證了當插值沒有完成時循環(huán)不退出,實現(xiàn)了重復調(diào)用FrameCallback接口,實現(xiàn)動畫繪制過程中的多次插值操作。
由于在調(diào)用FrameCallback接口時可能存在延遲或者漏調(diào)用的問題,從而在調(diào)用Choreographer模塊的FrameCallback接口進行插值操作之后還可以包括:記錄所述當前插值繪制的時間,判斷預設時間內(nèi)是否進行下一次插值操作,若預設時間內(nèi)未進行下一次插值操作,則進行鉗位處理。
具體地,所述預設時間可以顯示器刷新時間差,即顯示器的上一幀與當前幀的時間差,也可以是大于顯示器刷新時間差,如50毫秒,60毫秒等。在本實施例中,所述預設時間段可以為60毫秒。而在安卓系統(tǒng)中顯示器刷新的幀頻一般為60Hz,那么上一幀與當前幀的時間差為16.6毫秒。從而,在進行一次動畫繪制后,獲取所述當前插值操作與上一次插值操作的時間間隔,并將所述時間間隔與預設時間段進行比較;當所述時間間隔大于所述預設時間段時,調(diào)用Choreographer模塊的FrameCallback接口進行預設次數(shù)插值操作。避免了由于FrameCallback接口時可能存在延遲或者漏調(diào)用,而產(chǎn)生的動畫卡頓,給用戶使用帶來不變。
示例性的,所述獲取所述當前插值操作與上一次插值操作的時間間隔具體可以為當進行當前插值操作后,啟動配置預設時間段的計時器,當計時器超時時,接收到同步信號時,控制FrameCallback接口進行預設次數(shù)的插值操作。
所述預設次數(shù)為根據(jù)所述預設時間段預先設置的,如當預設時間段為60毫秒時,所述預設次數(shù)可以為3。也就是說,當所述時間間隔大于所述預設時間段時,調(diào)用Choreographer模塊的FrameCallback接口進行3數(shù)插值操作。從而,所述當所述當所述時間間隔大于所述預設時間段時,調(diào)用Choreographer模塊的FrameCallback接口進行預設次數(shù)插值操作具體為:當所述時間間隔大于所述預設時間段時,根據(jù)預設預設時間段與插值次數(shù)的對應關(guān)系確定進行插值的次數(shù);調(diào)用Choreographer模塊的FrameCallback接口進行預設次數(shù)的插值。這樣可以避免由于FrameCallback接口的漏調(diào)等原因產(chǎn)生的插值不均勻或者卡頓問題。
本發(fā)明還提供了一種基于同步信號的動畫繪制系統(tǒng),如圖2所示,其包括:
監(jiān)聽模塊100,用于當接收到繪制動畫的指令時,通過Choreographer模塊監(jiān)聽系統(tǒng)的同步信號,其中,所述同步信號為顯示器刷新所產(chǎn)生的信號;
插值模塊200,用于當監(jiān)聽到所述同步信號時,調(diào)用Choreographer模塊的FrameCallback接口進行插值操作。
所述基于同步信號的動畫繪制系統(tǒng),其還包括:
獲取模塊,用于當檢測到終端設備啟動應用程序時,獲取Android系統(tǒng)的Choreographer模塊,并將所述Choreographer模塊配置于所述應用的主線程消息列隊。
所述基于同步信號的動畫繪制系統(tǒng),其還包括:
比較模塊,用于獲取所述當前插值操作與上一次插值操作的時間間隔,并將所述時間間隔與預設時間段進行比較;
第二插值模塊,用于當所述時間間隔大于所述預設時間段時,調(diào)用Choreographer模塊的FrameCallback接口進行預設次數(shù)插值操作。
所述基于同步信號的動畫繪制系統(tǒng),其中,所述第二插值模塊具體包括:
確定單元,用于當所述時間間隔大于所述預設時間段時,根據(jù)預設預設時間段與插值次數(shù)的對應關(guān)系確定進行插值的次數(shù);
插值單元,用于調(diào)用Choreographer模塊的FrameCallback接口進行預設次數(shù)的插值。
所述基于同步信號的動畫繪制系統(tǒng),其中,所述FrameCallback接口預設配置循環(huán)插值操作指令。
在本發(fā)明所提供的實施例中,應該理解到,所揭露的系統(tǒng)和方法,可以通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述模塊的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡單元上。可以根據(jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。
另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用硬件加軟件功能單元的形式實現(xiàn)。
上述以軟件功能單元的形式實現(xiàn)的集成的單元,可以存儲在一個計算機可讀取存儲介質(zhì)中。上述軟件功能單元存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網(wǎng)絡設備等)或處理器(processor)執(zhí)行本發(fā)明各個實施例所述方法的部分步驟。而前述的存儲介質(zhì)包括:U盤、移動硬盤、只讀存儲器(Read-Only Memory,ROM)、隨機存取存儲器(Random Access Memory,RAM)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
最后應說明的是:以上實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述實施例對本發(fā)明進行了詳細的說明,本領(lǐng)域的普通技術(shù)人員應當理解:其依然可以對前述各實施例所記載的技術(shù)方案進行修改,或者對其中部分技術(shù)特征進行等同替換;而這些修改或者替換,并不使相應技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的精神和范圍。