转自http://www.ophonesdn.com/article/show/278;jsessionid=47A3929593AFBB3038786C575833DD49
随着三星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:
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.oms.LiveWall" android:versionCode="1"
- android:versionName="1.0">
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- <service android:label="@string/app_name" android:name=".TimeWall"
- 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/alive_wall" />
- </service>
- </application>
- <uses-sdk android:minSdkVersion="7" />
- </manifest>
原来如此简单,动态壁纸仅仅有一个service就够了。其中
android:permission="android.permission.BIND_WALLPAPER"
是让该service有能设置为壁纸的权限,没有的话该壁纸只能被预览。
<uses-sdk android:minSdkVersion="7" />
告诉我们,如果你想开发一个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 {
-
- }
- }
类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);
- }
从上面可以看出,动态壁纸实际上就是不断刷新的静态壁纸,越华丽越流畅,
CPU就消耗越大,对于现在的本来电量就不怎么地的智能机来说,耗电也是很可观的。但是偶尔向朋友们炫一下还是绝对可行的。drawTime()与drawCross()的内容可以由家自己实现,在
分享到:
相关推荐
- 利用几何画板等技术,动态演示图形变化,通过面积法推导平方差公式。 - 学生通过试算、观察、总结,发现两个二项式相乘形成平方差的规律。 - 领会公式的结构,通过实例和练习,学会正确应用。 4. **活动过程**...
探究性 网站 资源 探究性资源型网站讲述
企业财务管理转型探究.doc
探究集团公司财务人员转型思路
操作系统 引导探究
【中考数学全程复习方略】中的第五个专题是“动态探究问题”,这主要涉及的是在数学解题中处理动态变化的元素,如动点、动线和动图的问题。动态探究问题是中考数学的重要考查点,它考察学生的逻辑思维、抽象理解和...
探究经济转型中国原始资本积累研究论文.doc
探究初中数学翻转课堂的开展.pdf
这款名为“新动态视频壁纸微信小程序源码”的项目是一个专为微信平台设计的应用程序源代码,旨在提供动态视频壁纸和静态壁纸服务。源码的特色在于它不仅包含了丰富的动态视频内容,同时也兼顾了用户对静态壁纸的需求...
探究电动机的转动原理磁场对电流的作用粤沪PPT学习教案.pptx
开展探究示范教学以促进数学深度学习,实际上是探究教学与深度学习理论在数学教学中的具体应用。探究式教学强调学生主动参与和探索,是通过师生合作、学生自主学习等途径进行的教学模式。深度学习则指学习者在认知...
高职院校英语教学转型定位探究.doc
云计算赋能企业办公转型升级探究.pdf
4. **服务和服务生命周期**:探究动态壁纸服务是如何在后台运行并持续提供壁纸效果的,理解Service组件及其生命周期。 5. **性能优化**:分析源码以了解如何提高应用的性能,减少内存占用,确保在各种设备上流畅...
高校物理翻转课堂教学策略探究.doc
1. **实验探究题的定义与目的**:初中化学实验探究题是一种教育方式,旨在评估学生对实验技能、科学探究方法和过程的理解,以及他们的科学素养。这种题型强调新课程标准和教材改革的要求,常出现在中考中,具有较高...
探究数学总复习翻转课堂的教学模式.docx
荷兰数学家弗赖登塔尔的“再创造教学”理论主张数学教育应是一个动态的过程,学生需积极参与,体验到创造的必要性,才能真正理解和掌握数学。教师的角色转变为引导者,鼓励学生通过各种途径自我探索和获取知识,从而...
2. 动态性:由于研究过程是不断发展变化的,教学设计需随着学生的研究进程调整,保持灵活性,以适应新的发现和挑战。 3. 协作性:探究型学习强调团队合作,教学设计中融入协作元素,促进学生间的交流和合作,共同...