Android編程之動態(tài)壁紙實例分析
本文實例講述了Android編程之動態(tài)壁紙。分享給大家供大家參考,具體如下:
從android 2.1版本起引入了動態(tài)壁紙的概念,熟悉android的人一定不會陌生。這里解釋一個動態(tài)壁紙是怎么形成又是怎么工作的。
首先動態(tài)桌面的動態(tài)體現(xiàn)出這個組件是實時變化的,也就是說有一個后臺在不停的刷新這個組件。聯(lián)想到后臺組件首先想到的就是service,從代碼角度看,果然如此。每一個動態(tài)桌面都繼承自WallpaperService,其中必須實現(xiàn)的抽象方法onCreateEngine,返回一個Engine對象,實際上所有的繪圖與刷新都是由engine完成,service正是提供engine的部分。
打個比方說,在我們設(shè)置一個動態(tài)壁紙時有預(yù)覽,這時啟動了一個預(yù)覽的engine來繪制與刷新,當(dāng)我們設(shè)置了壁紙以后又啟動了一個填充整個桌面的engine在實時的繪制與刷新。所以動態(tài)壁紙的重點在engine里,這里等下提及。
現(xiàn)在著手創(chuàng)建一個動態(tài)壁紙。
第一步創(chuàng)建我們的WallpaperService類,同樣在其中創(chuàng)建engine類,engine是WallpaperService的內(nèi)部類。其中engine中關(guān)鍵的方法有
引用
有了surfaceholder我們可以獲得canvas對象,有了canvas我們就可以繪圖
引用
屏幕滑動的時候觸發(fā)此方法
xOffset可以用來判斷屏幕序號 百分比的形式,舉例說如果你手機上有5個分屏,第一屏這里是0.000,第二屏是0.2000 第三屏是0.4000以此類推
xOffsetStep從字面意義就能理解是步進(jìn) 同樣和你的分屏數(shù)有關(guān) 如果你的分屏數(shù)為5 則每次步進(jìn)xOffsetStep都是0.20000
xPixelOffset就是實際上像素的移動距離,也就是說移動了多少像素,奇怪的是這里左右移動像素點的offset都為負(fù)數(shù)
引用
當(dāng)動態(tài)壁紙的可見性發(fā)生變化時觸發(fā)此方法,舉例說在桌面上時,動態(tài)壁紙的visibility為true,當(dāng)你運行某個程序的時候動態(tài)壁紙的visibility變?yōu)閒alse,這里很好理解
引用
可以監(jiān)聽點擊事件,點擊時觸發(fā)此方法,action為 android.wallpaper.tap,x記錄了橫坐標(biāo),y記錄了縱坐標(biāo),z的作用未知,可能是為3d桌面預(yù)留下的? 沒有試驗過,z一般為0
還有一些重要的生命周期方法,和activity類似,就不多說了。
當(dāng)你要將一個app定義為動態(tài)壁紙時,首先需要在AndroidManifest.xml中進(jìn)行指定,前面提到過,動態(tài)壁紙是從 android 2.1 開始支持,所以需要添加
引用
由于還要對系統(tǒng)說明這是一個動態(tài)壁紙,我們還要加入
除此之外,由于我們運行了service,所以同樣需要對service進(jìn)行配置
引用
<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>
比較重要的部分首先是權(quán)限android:permission="android.permission.BIND_WALLPAPER"
其次service需要響應(yīng)action
再就是配置文件了
接下來接收配置文件。首先在res文件夾下建立一個xml目錄,和寫appwidget一樣。
在目錄下我們創(chuàng)建一個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 是系統(tǒng)要求這么寫的,帶上命名空間。
引用
指定配置動態(tài)壁紙的PreferenceActivity,這個PreferenceActivity同樣需要在AndroidManifest.xml中注冊,不過和一般的activity一樣。當(dāng)我們點擊動態(tài)壁紙的設(shè)置按鈕時,導(dǎo)向這個activity。不可缺少,否則點擊設(shè)置會報錯。
引用
android:thumbnail="@drawable/ic_launcher" android:description="@string/wallpaper_description"
第一個圖標(biāo)對應(yīng)動態(tài)壁紙列表中的圖標(biāo),第二條description則是圖標(biāo)右邊你創(chuàng)建的動態(tài)壁紙的名字。
至此動態(tài)壁紙的框架就算完成了。接下來只需要在wallpaperservice類中加入刷新機制,加入動態(tài)內(nèi)容,一個動態(tài)桌面就完成了。
希望本文所述對大家Android程序設(shè)計有所幫助。
相關(guān)文章
Android SharedPreference存儲文件三步走
SharedPreferences是安卓平臺上一個輕量級的存儲類,用來保存應(yīng)用的一些常用配置,比如Activity狀態(tài),Activity暫停時,將此activity的狀態(tài)保存到SharedPereferences中;當(dāng)Activity重載,系統(tǒng)回調(diào)方法onSaveInstanceState時,再從SharedPreferences中將值取出2023-01-01
Android Insets相關(guān)知識總結(jié)
這篇文章主要介紹了Android Insets相關(guān)知識總結(jié),幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下2021-03-03
Android應(yīng)用中炫酷的橫向和環(huán)形進(jìn)度條的實例分享
這篇文章主要介紹了Android應(yīng)用中炫酷的橫向和圓形進(jìn)度條的實例分享,文中利用了一些GitHub上的插件進(jìn)行改寫,也是一片很好的二次開發(fā)教學(xué),需要的朋友可以參考下2016-04-04
Android編程實現(xiàn)根據(jù)經(jīng)緯度查詢地址并對獲取的json數(shù)據(jù)進(jìn)行解析的方法
這篇文章主要介紹了Android編程實現(xiàn)根據(jù)經(jīng)緯度查詢地址并對獲取的json數(shù)據(jù)進(jìn)行解析的方法,結(jié)合實例形式分析了Android的經(jīng)緯度地址解析與json格式數(shù)據(jù)操作相關(guān)技巧,需要的朋友可以參考下2017-02-02

