Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android編程之動態壁紙實例分析

Android編程之動態壁紙實例分析

編輯:關於Android編程

本文實例講述了Android編程之動態壁紙。分享給大家供大家參考,具體如下:

從android 2.1版本起引入了動態壁紙的概念,熟悉android的人一定不會陌生。這裡解釋一個動態壁紙是怎麼形成又是怎麼工作的。

首先動態桌面的動態體現出這個組件是實時變化的,也就是說有一個後台在不停的刷新這個組件。聯想到後台組件首先想到的就是service,從代碼角度看,果然如此。每一個動態桌面都繼承自WallpaperService,其中必須實現的抽象方法onCreateEngine,返回一個Engine對象,實際上所有的繪圖與刷新都是由engine完成,service正是提供engine的部分。

打個比方說,在我們設置一個動態壁紙時有預覽,這時啟動了一個預覽的engine來繪制與刷新,當我們設置了壁紙以後又啟動了一個填充整個桌面的engine在實時的繪制與刷新。所以動態壁紙的重點在engine裡,這裡等下提及。

現在著手創建一個動態壁紙。

第一步創建我們的WallpaperService類,同樣在其中創建engine類,engine是WallpaperService的內部類。其中engine中關鍵的方法有

引用
復制代碼 代碼如下:onCreate(SurfaceHolder surfaceHolder)

有了surfaceholder我們可以獲得canvas對象,有了canvas我們就可以繪圖

引用
復制代碼 代碼如下:onOffsetsChanged(float xOffset, float yOffset, float xOffsetStep,float yOffsetStep, int xPixelOffset, int yPixelOffset)

屏幕滑動的時候觸發此方法

xOffset可以用來判斷屏幕序號 百分比的形式,舉例說如果你手機上有5個分屏,第一屏這裡是0.000,第二屏是0.2000 第三屏是0.4000以此類推
xOffsetStep從字面意義就能理解是步進 同樣和你的分屏數有關 如果你的分屏數為5 則每次步進xOffsetStep都是0.20000
xPixelOffset就是實際上像素的移動距離,也就是說移動了多少像素,奇怪的是這裡左右移動像素點的offset都為負數

引用
復制代碼 代碼如下:public void onVisibilityChanged(boolean visible)

當動態壁紙的可見性發生變化時觸發此方法,舉例說在桌面上時,動態壁紙的visibility為true,當你運行某個程序的時候動態壁紙的visibility變為false,這裡很好理解

引用
復制代碼 代碼如下:public Bundle onCommand(String action, int x, int y, int z, Bundle extras, boolean resultRequested)

可以監聽點擊事件,點擊時觸發此方法,action為 android.wallpaper.tap,x記錄了橫坐標,y記錄了縱坐標,z的作用未知,可能是為3d桌面預留下的? 沒有試驗過,z一般為0
還有一些重要的生命周期方法,和activity類似,就不多說了。

當你要將一個app定義為動態壁紙時,首先需要在AndroidManifest.xml中進行指定,前面提到過,動態壁紙是從 android 2.1 開始支持,所以需要添加

引用
復制代碼 代碼如下:<uses-sdk android:minSdkVersion="7" />

由於還要對系統說明這是一個動態壁紙,我們還要加入
復制代碼 代碼如下:<uses-feature android:name="android.softwate.live_wallpaper"/>
除此之外,由於我們運行了service,所以同樣需要對service進行配置
引用

<service android:name="LiveWallService" android:label="My_live _wallpaper" android:permission="android.permission.BIND_WALLPAPER" > 
  <intent-filter> 
   <action android:name="android.service.wallpaper.WallpaperService" /> 
  </intent-filter> 
  <meta-data android:name="android.service.wallpaper" android:resource="@xml/livepaper"/> 
</service>

比較重要的部分首先是權限android:permission="android.permission.BIND_WALLPAPER"
其次service需要響應action
復制代碼 代碼如下:android:name="android.service.wallpaper.WallpaperService
再就是配置文件了
復制代碼 代碼如下:<meta-data android:name="android.service.wallpaper" android:resource="@xml/livepaper"/>

接下來接收配置文件。首先在res文件夾下建立一個xml目錄,和寫appwidget一樣。
在目錄下我們創建一個xml文件

<?xml version="1.0" encoding="utf-8"?> 
<wallpaper xmlns:android="http://schemas.android.com/apk/res/android" 
 android:settingsActivity="LiveWallPreference" 
 android:thumbnail="@drawable/ic_launcher" 
 android:description="@string/wallpaper_description" 
 /> 

wallpaper 是系統要求這麼寫的,帶上命名空間。

引用
復制代碼 代碼如下:android:settingsActivity="LiveWallPreference"

指定配置動態壁紙的PreferenceActivity,這個PreferenceActivity同樣需要在AndroidManifest.xml中注冊,不過和一般的activity一樣。當我們點擊動態壁紙的設置按鈕時,導向這個activity。不可缺少,否則點擊設置會報錯。

引用

android:thumbnail="@drawable/ic_launcher" 
android:description="@string/wallpaper_description" 

第一個圖標對應動態壁紙列表中的圖標,第二條description則是圖標右邊你創建的動態壁紙的名字。

至此動態壁紙的框架就算完成了。接下來只需要在wallpaperservice類中加入刷新機制,加入動態內容,一個動態桌面就完成了。

希望本文所述對大家Android程序設計有所幫助。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved