編輯:Android開發實例
一、為什麼我們要使用AssetManager
如果你的游戲很簡單,加載資源不需要很多時間,那你沒必要使用AssetManager。但在其他情況下推薦使用它,因為有以下好處:
二、創建AssetManager
這部分相當簡單
AssetManager manager = new AssetManager();
這樣建立一個標准的AssetManager,此時所有的加載器都儲存在內,讓我們繼續看加載器是如何工作的。
三、加載資源
在加載前,AssetManager需要知道加載什麼類型的資源,這個功能通過資源加載器實現。有兩個變量,同步資源加載器SynchronourAssetLoader和異步資源加載器AsynchronousAssetLoader。前者加載任何資源都在渲染進程中,後者加載資源在另外一個線程中。比如說,一個Texture需要一個Pixmap,然後加載OpenGL依賴於渲染線程。下面的資源類型可以由AssetManager直接創建。
manager.load("data/mytexture.png", Texture.class);目前為止,我們只是將資源放入加載隊列,AssetManager還沒有加載任何東西。我們必須不斷調用AssetManager#update()在ApplicationListener#render()中:
manager.load("data/myfont.fnt", BitmapFont.class);
manager.load("data/mymusic.ogg", Music.class);
- public MyAppListener implements ApplicationListener {
- public void render() {
- if(manager.update()) {
- // 完成加載,進行跳轉
- }
- // 顯示加載信息
- float progress = manager.getProgress()
- ... left to the reader ...
- }
- }
只要AssetManager#update()返回false,我們就知道加載尚未完成。為了查看當前加載狀態可以使用AssetManager#getProgress(),它返回一個0到1的數,表示當前加載的完成的百分比。其他方法提供了相似的信息,比如AssetManager#getLoadedAssets()和AssetManager#getQueuedAssets()。你必須持續調用AssetManager#update()進行加載。 如果你想打斷或者確定所有資源已經加載完成,可以調用:
manager.finishLoading();它會打斷直到所以資源加載完成。關於異步加載有點失敗,但是有時候可能需要它(比如加載界面自身需要顯示的資源)。
四、獲得資源 這個更簡單:
Texture tex = manager.get("data/mytexture.png", Texture.class);當然可以假設所有資源已經成功加載,如果你要檢查某個資源是否加載成功,可以:
BitmapFont font = manager.get("data/myfont.fnt", BitmapFont.class);
if(manager.isLoaded("data/mytexture.png")) {
// texture 已經可以使用
Texture tex = manager.get("data/mytexture.png", Texture.class);
}
五、釋放/銷毀資源
像這樣:
manager.unload("data/myfont.fnt");
如果這個font引用了一個你之前手動加載的紋理,那這個紋理不會被銷毀。它被多次引用,一個來自bitmap font,還有個是它自己本身。只要引用數不等於0,這個紋理就不會被銷毀。
被AssetManager管理的資源不能通過手動銷毀來代替AssetManager#unload()。
如果你想馬上處理所有的資源可以使用
manager.clear();
或者
manager.dispose();
兩者都會銷毀所有當前加載的資源,並且清空隊列和沒有加載完成的資源。而且,AssetManager#dispose()方法會銷毀AssetManager本身。所以,不能再重新使用AssetManager。
在5.2.1節和5.2.2節介紹了<a>標簽以及TextView自動識別的特殊文本(網址、電話號、Email等),這些都可以通過單擊來觸發不同的動作。
上一節中講了App->Activity->Custom Title
最近項目中需要用到ListView下拉刷新的功能,一開始想圖省事,在網上直接找一個現成的,可是嘗試了網上多個版本的下拉刷新之後發現效果都不怎麼理想。有些是因為功能
繼前一篇文章講到Android上的SQLite分頁讀取,其功能只是用文本框顯示數據而已。本文就講得更加深入些,實現並封裝一個SQL分頁表格控件,不僅支持分頁還是以