Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android SDK

在 Android 中使用 GIF 動畫創建動態壁紙

by
Difficulty:IntermediateLength:LongLanguages:

Chinese (Traditional) (中文(繁體)) translation by Fuhuan (you can also view the original English article)

當妳看到美麗的 GIF 動畫無縫循環播放時,妳有沒有想過是否可以將其用作 Android 設備上的動態壁紙呢?  嗯,妳可以的,在本教程中,我將展示如何操作。

介紹

從頭開始創建壹個有趣而美麗的動態壁紙,只使用數學和代碼來生成圖形可能是乏味和耗時的。  它也需要很多創造力。  另壹方面,創建 GIF 動畫或在線查找更容易。  在本教程中,您將學習如何將任何 GIF 動畫轉換為動態壁紙。

準備工作

確保您已安裝最新版本的 Android Studio。 您可以從 Android 開發人員網站獲取。

即使妳會制作任何 GIF 動畫,我建議妳下載壹個好的影片。  電影只是 GIF 動畫(通常是從視頻創建的)的無縫循環。 妳可以在 Flickr 的上找到很多好的。

在本教程中,我使用的是 Flickr 用戶 djandyw.com 創建的 cinemagraph,因為它在 Creative Commons license 許可下可用。

1. 創建壹個新項目

啟動 Android Studio,創建壹個新項目,並命名項目   GIFWallpaper。  如果您打算在 Google Play 上發布此應用,請選擇壹個唯壹的包名。

將最低 SDK 設置為   API 8:Android 2.2(Froyo)。

我們的應用程序不會有   活動,所以選擇不添加活動,然後單擊完成。

2. 描述壁紙

動態壁紙需要壹個描述它的文件。 創建壹個名為 res / xml / wallpaper.xml 的新 XML 文件,並使用以下 XML 替換其內容:

標簽和縮略圖特別重要,因為當您的設備上可用的壁紙列表中出現壁紙時,將會使用該標簽和縮略圖。

3. 編輯清單

要作為動態壁紙運行,我們的應用程序只需要壹個權限   android.permission.BIND_WALLPAPER。

作為服務運行的動態壁紙可以接受  android.service.wallpaper.WallpaperService 這個意圖行動。 將服務命名為 GIFWallpaperService 並將其添加到項目的清單   的 AndroidManifest.xml 中。

將服務命名為 GIFWallpaperService 並將其添加到項目的清單   的 AndroidManifest.xml 中。

4. 添加 GIF 動畫

將您從 Flickr 下載的 GIF 動畫復制到項目的 assets 文件夾 並命名為 girl.gif。

5. 創建服務

創建壹個新的 Java 類並將其命名為   GIFWallpaperService.java。 這個類繼承 WallpaperService。

因為   WallpaperService 是壹個抽象類,妳必須重寫它的 onCreateEngine 方法並返回壹個自己的實例 Engine,它可以渲染 GIF 的幀。

要使用 GIF 動畫,您首先必須將其轉換為電影對象。 可以使用電影類的 decodeStream 方法來執行此操作。 壹旦電影對象被創建,把它作為壹個參數傳遞給自定義引擎的構造函數。

onCreateEngine 方法如下:

6. 創建引擎

我們現在就開始使用引擎工作。 在 GIFWallpaperEngine 類中創建壹個名為 GIFWallpaperService 的類並且繼承 WallpaperService.Engine。

將以下字段添加到此新類中:

  • frameDuration:該整數表示重繪操作的​​延遲時間。  值為 20,每秒可以提供 50 幀。
  • 可見:這個布爾值允許引擎知道動態壁紙當前在屏幕上是否可見。  這很重要,因為當不可見時,我們不應該繪制壁紙。
  • 電影:這是壹個電影對象形式的 GIF 動畫。
  • holder:這是指向可用於 engine 的 SurfaceHolder 對象。 必須通過重寫的 onCreate 方法來初始化它。
  • handler:這是壹個 Handler 對象,用來啟動壹個 Runnable 來負責實際繪制壁紙對象。

妳的類現在應該是這樣的:

接下來,創建壹個名為 draw 的方法來繪制 GIF 動畫的內容。  該方法分解為:

  • 我們首先檢查 visible 變量是否設置為   true。  如果為 true,我們才繼續下去。
  • 使用 SurfaceHolder 的 lockCanvas 方法獲取壹個引用。
  • 在縮放和定位之後在 Canvas 上繪制 GIF 動畫的框架。
  • 壹旦所有的繪圖完成,Canvas 回傳給 SurfaceHolder。
  • 使用電影對象的 setTime 方法更新 GIF 動畫的當前幀。
  • 等待 frameDuration 幾毫秒後再次使用處理程序調用該方法。

繪制方法從不直接調用。 它總是被處理程序和 Runnable 的對象調用。 因此,讓 Runnable 對象成為類的壹個字段並調用 drawGIF。

將以下代碼添加到   GIFWallpaperService  類中:

每當壁紙的可視性變化時,onVisibilityChanged 方法將自動調用。 我們需要重寫它,並根據可見參數的值來啟動或停止 drawGIF。 Handler 的 removeCallbacks 方法用於停止任何待處理的 drawGIF。

Handler 的 removeCallbacks 方法用於停止任何待處理的 drawGIF。

7. 編譯安裝

現在您的動態壁紙已準備就緒。  編譯並安裝在 Android 設備上。  壹旦安裝,應該可以在可用壁紙列表中找到壁紙。

大多數發射器讓您可以在長時間點擊手勢後更改壁紙。  或者,您可以進入設置頁面更改壁紙。

如果 GIF 看起來太小或沒有正確定位,則返回繪制方法來調整刻度和位置。

結論

您現在知道如何使用 GIF 動畫來創建動態壁紙了。  隨時嘗試更多的 GIF。  如果您打算在 Google Play 上發布動態壁紙,請確保您有創作者的許可,可以在商業上使用 GIF 動畫。 訪問 Android 開發人員網站 ,了解有關 WallpaperService 類的更多信息。


关注我们的公众号
Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.