日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android 动态壁纸 例子,android 动态壁纸实例(1)【转】

發布時間:2023/12/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 动态壁纸 例子,android 动态壁纸实例(1)【转】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

隨著三星Oscar的上市,流暢的操作,華麗的界面,OPhone 2.0的不俗表現不禁讓人眼前一亮。作為OPhone

2.0一個新特性,動態壁紙(Live

Wallpapers)為用戶帶來了更炫體驗。本文主要通過一個完整的時間壁紙(TimeWall)為大家介紹如何開發 Live

Wallpapers。還沒開發環境?趕緊去下載OPhone SDK 2.0吧!

1、 Live

Wallpapers是什么?

在oscar上有一個動態壁紙叫“天空草地”,用過一段時間,可以發現,隨著時間的變化,壁紙的天空就會由藍藍青天變成繁星滿天。看看效果:

為什么壁紙還有這么神奇的變化,這中間到底是什么在起作用?其實,一個Live

Wallpaper就是一個apk!也就是說,動態壁紙的實質是一個apk在后臺不斷地重繪壁紙,所以我們可以讓小草長高,小鳥飛翔。

來看一下我們TimeWall的AndoridManifest.xml:

encoding="utf-8"?>

xmlns:android="http://schemas.android.com/apk/res/android"

package="com.oms.LiveWall"

android:versionCode="1"

android:versionName="1.0">

android:icon="@drawable/icon"

android:label="@string/app_name">

android:label="@string/app_name"

android:name=".TimeWall"

android:permission="android.permission.BIND_WALLPAPER">

android:name="android.service.wallpaper.WallpaperService"

/>

android:name="android.service.wallpaper"

android:resource="@xml/alive_wall"

/>

android:minSdkVersion="7"

/>

原來如此簡單,動態壁紙僅僅有一個service就夠了。其中

android:permission="android.permission.BIND_WALLPAPER"

是讓該service有能設置為壁紙的權限,沒有的話該壁紙只能被預覽。

告訴我們,如果你想開發一個live wallpaper,必須是OPhone

2.0或者更高的版本。當然這也需要手機硬件的支持。

2、怎樣實現WallpaperService?

WallpaperService與其他的service唯一的不同就是,你必須要增加一個方法onCreateEngine(),它會返回一個WallpaperService.Engine,這個engine才是負責繪制壁紙以及響應與用戶交互事件的核心部件。這個service代碼結構如下:

public class TimeWall extends WallpaperService {

public Engine onCreateEngine() {

return new TimeEngine();

}

public class TimeEngine extends Engine {

// ...more code

}

}

類TimeEngine才是處理壁紙的核心類,我們會在類TimeEngine中加上自己的邏輯以完成壁紙的繪制、變化以及銷毀。Engine的生命周期與大多數OPhone應用程序組件,比如activity類似,都是從onCreate()開始,在銷毀時調用onDestory()方法。不同的是WallpaperService會提供一個surface用來繪制壁紙,所以在生命周期中多一個onSurfaceCreated與onSurfaceDestroyed的過程。下面是一個最簡生命周期:

也就是說只要我們實現上面四個方法,一個基本的LiveWallpaper就可以完成了。讓我們逐個看一下這幾個方法的實現。

@Override

public void onCreate(SurfaceHolder surfaceHolder) {

super.onCreate(surfaceHolder);

setTouchEventsEnabled(true);

}

@Override

public void onDestroy() {

super.onDestroy();

mHandler.removeMessages(DRAW);

}

@Override

public void onSurfaceCreated(SurfaceHolder holder) {

super.onSurfaceCreated(holder);

mHandler.sendEmptyMessage(DRAW);

}

@Override

public void onSurfaceDestroyed(SurfaceHolder holder)

{

super.onSurfaceDestroyed(holder);

mHandler.removeMessages(DRAW);

}

在onCreate方法里,我們

setTouchEventsEnabled(true);

作用是使壁紙能響應touch

event,默認是false。TimeWall會在用戶點擊屏幕的時候畫一個十字架,所以我們需要設置其為true。

可以看到我們在這四個方法里面做的事情非常簡單,就是在create時候發一個message,執行畫面的繪制,在destory時remove這個消息。看一下mHandler的代碼:

private Handler mHandler = new Handler() {

public void handleMessage(Message msg) {

switch (msg.what) {

case DRAW:

drawWall();

break;

}

}

};

方法drawWall():

private void drawWall() {

SurfaceHolder holder =

getSurfaceHolder();

Canvas canvas =

holder.lockCanvas();

drawTime(canvas);

drawCross(canvas);

holder.unlockCanvasAndPost(canvas);

mHandler.removeMessages(DRAW);

mHandler.sendEmptyMessageDelayed(DRAW,

50);

}

總結

以上是生活随笔為你收集整理的android 动态壁纸 例子,android 动态壁纸实例(1)【转】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。