• 周五. 4 月 24th, 2026

物嫩软件资讯网

软件资讯来物嫩

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

admin@wunen

5 月 23, 2025

随着三星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);

}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注