基於Android系統的GIF動畫播放方法及裝置與流程
2023-06-04 14:08:56 4

本發明涉及計算機移動通信技術領域,具體而言,涉及一種基於Android系統的GIF動畫播放方法及裝置。
背景技術:
GIF(Graphics Interchange Format,圖像互換格式)分為靜態GIF和動畫GIF兩種,擴展名為.gif,是一種壓縮位圖格式,支持透明背景圖像,適用於多種作業系統,「體型」很小,網絡上很多小動畫都是GIF格式。其實GIF動畫是將多幅圖像保存為一個圖像文件,從而形成動畫,最常見的就是通過一幀幀的GIF圖串聯起來的GIF動畫,所以歸根到底GIF仍然是圖片文件格式。
但是,Android系統中的圖形基類view及其子類是不能通過設置drawable的方式播放GIF動畫的,現有的實現GIF動畫播放的應用(app)大都引用了第三方提供的開源包,這勢必會增加程序安裝包的大小。
因此,在Android系統中,如何在不顯著增加程序安裝包大小的基礎上還能夠實現GIF動畫的播放,成為現在亟待解決的問題。
技術實現要素:
本發明的目的在於提供一種基於Android系統的GIF動畫播放方法及裝置以解決現有技術中引用第三方提供的開源包增加程序安裝包大小的問題。
為了實現上述目的,本發明實施例採用的技術方案如下:
第一方面,本發明實施例提供了一種基於Android系統的GIF動畫播放方法,包括:調用Android系統movie類的duration函數, 獲取GIF動畫的時長;如果獲取的時長大於0,則使用繼承於Android系統的圖形基類View的GifView控制項播放所述GIF動畫資源;如果獲取的時長小於或等於0,則將所述GIF動畫資源嵌入到html源碼中,使用繼承於Android系統的網絡視圖組件WebView的GifWebView控制項加載嵌入有所述GIF動畫資源的所述html源碼,以實現GIF動畫的播放。
進一步的,所述獲取GIF動畫的時長之前可以包括:分別創建繼承於Android系統的圖形基類View的GifView控制項以及繼承於Android系統的網絡視圖組件WebView的GifWebView控制項。
進一步的,所述使用繼承於Android系統的圖形基類View的GifView控制項播放所述GIF動畫資源,可以包括:計算待顯示的動畫幀數T4,T4=(T1-T2)/T3,其中,T1為所述Android系統的當前運行時間,T2為所述GIF動畫的開始播放時間,T3為所述GIF動畫的時長;將所述待顯示的動畫幀數T4對應的畫面渲染到播放所述GIF動畫資源的圖形容器中。
進一步的,所述將所述待顯示的動畫幀數T4對應的畫面渲染到播放所述GIF動畫資源的圖形容器中之前,可以包括:根據所述GifView控制項展示的區域,對所述圖形容器進行縮小或放大處理。
進一步的,所述獲取GIF動畫的時長之前,還可以包括:將所述GIF動畫的開始播放時間T2初始化為0;將所述Android系統的當前運行時間T1賦值給所述GIF動畫的開始播放時間T2。
進一步的,所述將GIF動畫資源嵌入到html源碼中,可以包括:將所述GIF動畫資源的讀取路徑,所述GIF動畫資源的播放寬度以及播放高度嵌入到html源碼中。
第二方面,本發明實施例還提供了一種基於Android系統的GIF動畫播放裝置,運行於安裝有Android系統的終端設備,所述裝置包括:調用模塊、第一播放模塊、第二播放模塊:所述調用模塊用於調用Android系統movie類的duration函數,獲取GIF動畫的時長;如果獲取的時長大於0,所述第一播放模塊用於使用繼承於Android系統的圖形基類View的GifView控制項播放所述GIF動畫資源;如果獲取的時長小於或等於0,所述第二播放模塊用於將所述GIF動畫資源嵌入到html源碼中,使用繼承於Android系統的網絡視圖組件WebView的GifWebView控制項加載嵌入有所述GIF動畫資源的所述html源碼,以實現GIF動畫的播放。
進一步的,所述裝置還可以包括創建模塊,用於分別創建繼承於Android系統的圖形基類View的GifView控制項以及繼承於Android系統的網絡視圖組件WebView的GifWebView控制項。
進一步的,所述第一播放模塊可以包括:計算單元,用於計算待顯示的動畫幀數T4,T4=(T1-T2)/T3,其中,T1為所述Android系統的當前運行時間,T2為所述GIF動畫的開始播放時間,T3為所述GIF動畫的時長;渲染單元,用於將所述待顯示的動畫幀數T4對應的畫面渲染到播放所述GIF動畫資源的圖形容器中。
進一步的,所述第一播放模塊還可以包括:縮放單元,用於根據所述GifView控制項展示的區域,對所述圖形容器進行縮小或放大處理。
進一步的,所述裝置還可以包括:初始化模塊,用於如果所述GIF動畫的開始播放時間T2為0,將所述Android系統的當前運行時間T1賦值給所述GIF動畫的開始播放時間T2。
進一步的,所述第二播放模塊還可以用於:將所述GIF動畫資源的讀取路徑,所述GIF動畫資源的播放寬度以及播放高度嵌入到html源碼中。
本發明實施例提供的基於Android系統的GIF動畫播放方法和裝置,當獲取的動畫時長大於0時,也就是可以使用GifView控制項正常播放時,使用GifView控制項播放所述GIF動畫資源,內存消耗較小,當獲取的動畫時長小於或等於0時,也就是使用GifView控制項無法播放時,使用GifWebView控制項加載嵌入有所述GIF動畫資源的所述html源碼,這樣可以保證GIF動畫能夠繼續正常播放。本發明實施例提供的基於Android系統的GIF動畫播放方法和裝置,一方面可以基於Android系統原生工具實現GIF動畫播放,不需要引入額外的第三方提供的開源包,有效控制了程序安裝包的大小,實現在不顯著增加程序安裝包大小的基礎上實現GIF動畫的正常播放,另一方面,利用GifView控制項和GifWebView控制項優勢互補的實現了較好的GIF動畫播放效果。
為使本發明的上述目的、特徵和優點能更明顯易懂,下文特舉較佳實施例,並配合所附附圖,作詳細說明如下。
附圖說明
為了更清楚地說明本發明實施例的技術方案,下面將對實施例中所需要使用的附圖作簡單地介紹,應當理解,以下附圖僅示出了本發明的某些實施例,因此不應被看作是對範圍的限定,對於本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他相關的附圖。
圖1示出了本發明實施例提供的用戶終端的結構框圖;
圖2示出了本發明第一實施例提供的一種基於Android系統的GIF動畫播放方法的流程示意圖;
圖3示出了本發明第二實施例提供的一種基於Android系統的GIF動畫播放方法在一種情況下的流程示意圖;
圖4示出了本發明第二實施例提供的一種基於Android系統的GIF動畫播放方法在另一種情況下的流程示意圖;
圖5示出了本發明第三實施例提供的一種基於Android系統的GIF動畫播放裝置的結構框圖;
圖6示出了本發明第三實施例提供的一種基於Android系統的GIF動畫播放裝置中部分模塊的結構框圖;
圖7示出了本發明第四實施例提供的一種基於Android系統的GIF動畫播放裝置的結構框圖。
具體實施方式
本發明實施例所提供的基於Android系統的GIF動畫播放方法及裝置可應用於如圖1所示的終端設備100中終端設備100。於本發明實施例中,終端設備100優選為安裝有Android系統移動終端設備,例如可以包括智慧型手機、平板電腦、電子書閱讀器、膝上型便攜計算機、車載電腦、穿戴式移動終端等等。
圖1示出了一種可應用於本發明實施例中的用戶終端的結構框圖。如圖1所示,終端設備100包括存儲器102、存儲控制器104,一個或多個(圖中僅示出一個)處理器106、外設接口108、射頻模塊110、音頻模塊112、觸控屏幕114等。這些組件通過一條或多條通訊總線/信號線116相互通訊。
存儲器102可用於存儲軟體程序以及模塊,如本發明實施例中的基於Android系統的GIF動畫播放方法及裝置對應的程序指令/ 模塊,處理器106通過運行存儲在存儲器102內的軟體程序以及模塊,從而執行各種功能應用以及數據處理,如本發明實施例提供的基於Android系統的GIF動畫播放方法。
存儲器102可包括高速隨機存儲器,還可包括非易失性存儲器,如一個或者多個磁性存儲裝置、快閃記憶體、或者其他非易失性固態存儲器。處理器106以及其他可能的組件對存儲器102的訪問可在存儲控制器104的控制下進行。
外設接口108將各種輸入/輸入裝置耦合至處理器106以及存儲器102。在一些實施例中,外設接口108,處理器106以及存儲控制器104可以在單個晶片中實現。在其他一些實例中,他們可以分別由獨立的晶片實現。
射頻模塊110用於接收以及發送電磁波,實現電磁波與電信號的相互轉換,從而與通訊網絡或者其他設備進行通訊。
音頻模塊112向用戶提供音頻接口,其可包括一個或多個麥克風、一個或者多個揚聲器以及音頻電路。
觸控屏幕114在終端設備100與用戶之間同時提供一個輸出及輸入界面。
可以理解,圖1所示的結構僅為示意,終端設備100還可包括比圖1中所示更多或者更少的組件,或者具有與圖1所示不同的配置。圖1中所示的各組件可以採用硬體、軟體或其組合實現。
本發明實施例提出的基於Android系統的GIF動畫播放方法和裝置,提供了一種基於Android系統原生工具實現GIF動畫播放的方案,不需要引入額外的第三方提供的開源包,可以有效控制程序安裝包的大小。
在發明實施例提供的方案中,創建了兩個控制項,一個是繼承於Android系統的圖形基類View的GifView控制項,另一個是繼承於Android系統的網絡視圖組件WebView的GifWebView控制項,並將這兩個控制項結合使用。利用GifView控制項和GifWebView控制項優勢互補的實現了較好的GIF動畫播放效果。
具體的,在本發明實施例中,利用Android系統提供的原生工具movie類,將movie類與Android系統中的圖形基類view結合在一起。自定義GifView控制項繼承於View,將movie對象以組合的方式添加到GifView中,以時間軸為依據,通過自繪的方式可以實現GIF動畫播放。使用GifView控制項實現GIF動畫的播放內存消耗較小,但是在處理不同編碼格式的GIF圖片時,這種方法存在一些兼容性的問題,會導致GIF動畫無法播放。
Android系統還提供了原生的工具網絡視圖組件WebView,構建繼承於網絡視圖組件WebView的GifWebView控制項,通過加載html頁面的形式實現GIF動畫播放。在加載html頁面前,將GIF動畫資源嵌入到一段html源碼中。使用GifWebView控制項播放GIF動畫,幾乎不存在播放的情況,但是內存開銷比較大,特別是播放多個GIF動畫時,比較容易出現OutOfMemory(內存不足)的異常情況。
本發明實施例提供的方案中,只有在當通過調用Android系統movie類的duration函數獲取的動畫時長(也就是動畫的總時長)小於或等於0時,也就是獲取失敗、使用GifView控制項無法播放時,才使用GifWebView控制項加載嵌入有所述GIF動畫資源的所述html源碼,這樣可以既可以保證GIF動畫能夠正常播放,又不會過多的消耗內存。
下面將結合本發明實施例中附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。通常在此處附圖中描述和示出的本發明實施例的組件可以以各種不同的配置來布置和設計。因此,以下對在附圖中提供的本發明的實施例的詳細描述並非旨在限制要求保護的本發明的範圍,而是僅僅表示本發明的選定實施例。基於本發明的實施例,本領域技術人員在沒有做出創造性勞動的前提下所獲得的所有其他實施例,都屬於本發明保護的範圍。
第一實施例
圖2示出了本發明第一實施例提供的一種基於Android系統的GIF動畫播放方法的流程圖,請參閱圖2,所述方法包括:
步驟S110,調用Android系統movie類的duration函數,獲取GIF動畫的時長;
如果獲取的時長大於0,則執行步驟S120,使用繼承於Android系統的圖形基類View的GifView控制項播放所述GIF動畫資源;
如果獲取的時長小於或等於0,則執行步驟S130,將所述GIF動畫資源嵌入到html源碼中,使用繼承於Android系統的網絡視圖組件WebView的GifWebView控制項加載嵌入有所述GIF動畫資源的所述html源碼,以實現GIF動畫的播放。
具體的,在步驟S120中,可以根據公式T4=(T1-T2)/T3計算待顯示的動畫幀數T4,其中,T1為所述Android系統的當前運行時間,T2為所述GIF動畫的開始播放時間,T3為所述GIF動畫的時長;將所述待顯示的動畫幀數T4對應的畫面渲染到播放所述GIF動畫資源的圖形容器中。
根據所述GifView控制項展示的區域,對所述圖形容器進行縮小或放大處理。
在步驟S130中,利用繼承於Android系統的網絡視圖組件WebView的GifWebView控制項播放GIF動畫。創建繼承於Android系統的網絡視圖組件WebView的GifWebView控制項,通過加載html頁面的形式實現GIF動畫播放。
在加載html頁面前,需要將所述GIF動畫資源的讀取路徑,所述GIF動畫資源的播放寬度以及播放高度嵌入到一段html源碼中,使用GifWebView加載該段html源碼的方式,從而達到播放GIF動畫的目的。
該段html源碼可以如下所示:
其中,$path為所述GIF動畫資源的讀取路徑,$width為GIF動畫資源的播放寬度,$height為GIF動畫資源的播放高度。
本實施例提供的基於Android系統的GIF動畫播放方法,當獲取的動畫時長大於0時,也就是可以使用GifView控制項正常播放時,使用GifView控制項播放所述GIF動畫資源,內存消耗較小,當獲取的動畫時長小於或等於0時,也就是使用GifView控制項無法播放時, 使用GifWebView控制項加載嵌入有所述GIF動畫資源的所述html源碼,這樣可以保證GIF動畫能夠繼續正常播放。一方面可以基於Android系統原生工具實現GIF動畫播放,不需要引入額外的第三方提供的開源包,有效控制了程序安裝包的大小,實現在不顯著增加程序安裝包大小的基礎上實現GIF動畫的正常播放,另一方面,利用GifView控制項和GifWebView控制項優勢互補的實現了較好的GIF動畫播放效果。
第二實施例
圖3及圖4示出了本發明第二實施例提供的一種基於Android系統的GIF動畫播放方法的流程圖。請參閱圖3及圖4,所述方法包括:
步驟S210,獲取終端設備的Android系統的當前運行時間T1;
步驟S220,判斷GIF動畫的開始播放時間T2是否小於或等於0,如果小於或等於0,則執行步驟S230後再執行步驟S240,否則,直接執行步驟S240;
步驟S230,將所述Android系統的當前運行時間T1賦值給所述GIF動畫的開始播放時間T2;
開始播放時間T2小於或等於0,也就是待顯示的動畫幀數T4為1,將系統的當前運行時間T1賦值給T2,記錄開始播放時間,完成初始化。
步驟S240,調用Android系統movie類的duration函數,獲取GIF動畫的時長T3;如果獲取的時長大於0,則執行步驟S250至步驟S280,如果獲取的時長小於或等於0,則執行步驟S290。
步驟S250,根據公式T4=(T1-T2)/T3計算待顯示的動畫幀數T4;
步驟S260,根據所述GifView控制項展示的區域,對圖形容器canvas進行縮小或放大處理;
步驟S270,將所述待顯示的動畫幀數T4對應的畫面渲染到播放所述GIF動畫資源的圖形容器canvas中;
步驟S280,調用invalidate函數進行自繪,返回步驟S210直到繪製完最後一幀。
步驟S290,將GIF動畫資源嵌入到html源碼中,使用繼承於Android系統的網絡視圖組件WebView的GifWebView控制項加載嵌入有所述GIF動畫資源的所述html源碼,以實現GIF動畫的播放。
在使用GifWebView控制項前先將GifView控制項由Android系統的控制項樹上移除,再將GifWebView控制項添加到控制項樹上。
需要說明的是,步驟S250至步驟S280實質上就是在使用GifView控制項播放所述GIF動畫資源的過程。
由於獲取的時長T3小於或等於0,也就是獲取失敗的情況,通常發生在第一次獲取時長時,這種情況下,採用GifWebView控制項播放GIF動畫可以避免播放失敗;一旦獲取成功,獲取的時長T3就是一個大於0的固定值,這種情況下,使用GifView控制項播放GIF動畫資源,可以減小內存消耗。
第三實施例
圖5示出了本發明第三實施例提供的一種基於Android系統的GIF動畫播放裝置的結構框圖,請參閱圖5,本實施例中的裝置可運行於終端設備100,本實施例中的裝置30包括:調用模塊31、第一播放模塊32、第二播放模塊33。
其中,所述調用模塊31用於獲取GIF動畫的時長;
如果獲取的時長大於0,所述第一播放模塊32用於使用繼承於Android系統的圖形基類View的GifView控制項播放所述GIF動畫資源;
如果獲取的時長小於或等於0,所述第二播放模塊33用於將所述GIF動畫資源嵌入到html源碼中,使用繼承於Android系統的網絡視圖組件WebView的GifWebView控制項加載嵌入有所述GIF動畫資源的所述html源碼,以實現GIF動畫的播放。
請參照圖6,所述第一播放模塊32,包括:
計算單元321,用於計算待顯示的動畫幀數T4,T4=(T1-T2)/T3,其中,T1為所述Android系統的當前運行時間,T2為所述GIF動畫的開始播放時間,T3為所述GIF動畫的時長;
渲染單元322,用於將所述待顯示的動畫幀數T4對應的畫面渲染到播放所述GIF動畫資源的圖形容器中。
第一播放模塊32還可以包括縮放單元323,用於根據所述GifView控制項展示的區域,對所述圖形容器進行縮小或放大處理。
所述第二播放模塊33還可以用於:將所述GIF動畫資源的讀取路徑,所述GIF動畫資源的播放寬度以及播放高度嵌入到html源碼中。
第四實施例
圖7示出了本發明第四實施例提供的基於Android系統的GIF動畫播放裝置的結構框圖,請參照圖7,本實施例中的裝置可運行於終端設備100,本實施例中的裝置40包括:創建模塊41、初始化模塊42、調用模塊31、第一播放模塊32、第二播放模塊33。
所述創建模塊41用於分別創建繼承於Android系統的圖形基類View的GifView控制項以及繼承於Android系統的網絡視圖組件WebView的GifWebView控制項;
所述初始化模塊42用於如果所述GIF動畫的開始播放時間T2為0,將所述Android系統的當前運行時間T1賦值給所述GIF動畫的開始播放時間T2;
所述調用模塊31用於獲取GIF動畫的時長;
如果獲取的時長大於0,所述第一播放模塊32用於使用繼承於Android系統的圖形基類View的GifView控制項播放所述GIF動畫資源;
如果獲取的時長小於或等於0,所述第二播放模塊33用於將所述GIF動畫資源嵌入到html源碼中,使用繼承於Android系統的網絡視圖組件WebView的GifWebView控制項加載嵌入有所述GIF動畫資源的所述html源碼,以實現GIF動畫的播放。
本實施例中的各單元可以是由軟體代碼實現,此時,上述的各單元可存儲於終端設備100的存儲器102內。以上各單元同樣可以由硬體例如集成電路晶片實現。
綜上所述,本發明實施例提供的基於Android系統的GIF動畫播放方法和裝置,當獲取的動畫時長大於0時,也就是可以使用GifView控制項正常播放時,使用GifView控制項播放所述GIF動畫資源,內存消耗較小,當獲取的動畫時長小於或等於0時,也就是使用GifView控制項無法播放時,使用GifWebView控制項加載嵌入有所述GIF動畫資源的所述html源碼,這樣可以保證GIF動畫能夠繼續正常播放。本發明實施例提供的基於Android系統的GIF動畫播放方法和裝置,一方面可以基於Android系統原生工具實現GIF動 畫播放,不需要引入額外的第三方提供的開源包,有效控制了程序安裝包的大小,實現在不顯著增加程序安裝包大小的基礎上實現GIF動畫的正常播放,另一方面,利用GifView控制項和GifWebView控制項優勢互補的實現了較好的GIF動畫播放效果。
需要說明的是,本說明書中的各個實施例均採用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。
本發明實施例所提供的基於Android系統的GIF動畫播放裝置,其實現原理及產生的技術效果和前述方法實施例相同,為簡要描述,裝置實施例部分未提及之處,可參考前述方法實施例中相應內容。
另外,附圖中的流程圖和框圖顯示了根據本發明的多個實施例的系統、方法和電腦程式產品的可能實現的體系架構、功能和操作。在這點上,流程圖或框圖中的每個方框可以代表一個模塊、程序段或代碼的一部分,所述模塊、程序段或代碼的一部分包含一個或多個用於實現規定的邏輯功能的可執行指令。也應當注意,在有些作為替換的實現中,方框中所標註的功能也可以以不同於附圖中所標註的順序發生。例如,兩個連續的方框實際上可以基本並行地執行,它們有時也可以按相反的順序執行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合,可以用執行規定的功能或動作的專用的基於硬體的系統來實現,或者可以用專用硬體與計算機指令的組合來實現。
本發明實施例所提供的電腦程式產品,包括存儲了程序代碼的計算機可讀存儲介質,所述程序代碼包括的指令可用於執行前面方法實施例中所述的方法,具體實現可參見方法實施例,在此不再贅述。
所屬領域的技術人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統、裝置和單元的具體工作過程,可以參考前述方法實施例中的對應過程,在此不再贅述。
在本申請所提供的幾個實施例中,應該理解到,所揭露的系統、裝置和方法,可以通過其它的方式實現。以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現時可以有另外的劃分方式,又例如,多個單元或組件可以結合或者可以集成到另一個系統,或一些特徵可以忽略,或不執行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些通信接口,裝置或單元的間接耦合或通信連接,可以是電性,機械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位於一個地方,或者也可以分布到多個網絡單元上。可以根據實際的需要選擇其中的部分或者全部單元來實現本實施例方案的目的。
另外,在本發明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。
所述功能如果以軟體功能單元的形式實現並作為獨立的產品銷售或使用時,可以存儲在一個計算機可讀取存儲介質中。基於這樣的理解,本發明的技術方案本質上或者說對現有技術做出貢獻的部分或者該技術方案的部分可以以軟體產品的形式體現出來,該計算機軟體產品存儲在一個存儲介質中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,伺服器,或者網絡設備等)執行本 發明各個實施例所述方法的全部或部分步驟。而前述的存儲介質包括:U盤、移動硬碟、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、磁碟或者光碟等各種可以存儲程序代碼的介質。
需要說明的是,在本文中,諸如第一和第二等之類的關係術語僅僅用來將一個實體或者操作與另一個實體或操作區分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關係或者順序。而且,術語「包括」、「包含」或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設備所固有的要素。在沒有更多限制的情況下,由語句「包括一個……」限定的要素,並不排除在包括所述要素的過程、方法、物品或者設備中還存在另外的相同要素。
以上所述僅為本發明的優選實施例而已,並不用於限制本發明,對於本領域的技術人員來說,本發明可以有各種更改和變化。凡在本發明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發明的保護範圍之內。應注意到:相似的標號和字母在下面的附圖中表示類似項,因此,一旦某一項在一個附圖中被定義,則在隨後的附圖中不需要對其進行進一步定義和解釋。