随着三星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)【转】相关推荐

  1. android自定义dialog 例子,android dialog自定义实例详解

    本人工作有一个月多了.对于android很多东西,都有了新的了解或者说真正的掌握.为了让更多的像我这样的小白少走弯路,所以我会坚持将我在工作中遇到的一些比较令我印象深刻的知识点整合出来给大家(顺序是按 ...

  2. android 有序广播例子,有序广播的实例解析--android案例《拦截有序广播》

    有序广播: 使用有序广关健处在于定义接收者的优先权,以下代码中有三个类接收广播, 案例<拦截有序广播> 1.布局文件 上述布局文件,定义了一个button按钮,并且为按钮注册了一个oncl ...

  3. android 短视频例子,Android短视频开发解析,什么才是开发的重点

    随着短视频的潮流席卷祖国大地,进行Android短视频开发的朋友们也越来越多了,相信很多朋友在进行短视频开发.平台搭建的时候会有点蒙,短视频这么多功能,哪个是重点呀? 接下来就为大家讲解一下,Andr ...

  4. android百度地图例子,Android使用百度地图的注意点

    /* http://my.oschina.net/lifj/blog/283063 */ 0.不要参考官方的网页示例 很奇怪,他的官网的使用示例更新不及时. 下载api的时候,里面有一个demo.最好 ...

  5. android动态壁纸引擎,Android动态壁纸开发

    新建一个Android项目: 完成下面步骤后,安装到手机,并设置动态壁纸才能看到效果. res/xml/cube1.xml AndroidManifest.xml CubeWallpaper1.jav ...

  6. Android系统之路(初识MTK) ------ (详细精华)添加客供系统壁纸去除系统动态壁纸/Camera默认fine/remove android beam

    ① the first one 进入Camera 设置里面默认 Video quality 摄录像fine 1920*1088 使用 eclipse Dump view hierarchy for u ...

  7. android 动态label,Android仿抖音实现动态壁纸

    一.概述: 壁纸运行在一个Android服务之中,这个服务的名字叫做WallpaperService.当用户选择了一个壁纸之后,此壁纸所对应的WallpaperService便会启动并开始进行壁纸的绘 ...

  8. android动态壁纸提取,[图]大神已提取出一加8T的动态壁纸:Android 8.0+设备均可使用...

    原标题:[图]大神已提取出一加8T的动态壁纸:Android 8.0+设备均可使用 在过去数周时间里,不断有一加8T的信息在网络上被曝光.在官方的预热和爆料人士分享的细节下,一加8T基本上已经浮出水面 ...

  9. Android 壁纸应用之动态壁纸

    效果图,图中桌面背景为一段视频 对动态壁纸进行一些设置 在res下创建一个xml文件夹,在创建一个wallpager标签文件 <?xml version="1.0" enco ...

  10. android视频动态壁纸app,视频动态壁纸app下载-视频动态壁纸app安卓版下载V1.0安卓版 - 非凡软件站...

    提供了海量高清壁纸以及各种各样主题的<视频动态壁纸>APP带给大家,大家可以根据自己喜欢的类型进行更换使用,打造独一无二的手机桌面.无论是动态壁纸还是静态壁纸都能在这里找到,各色各样的壁纸 ...

最新文章

  1. 家中电脑无法共享,联通域名解析劫持竟是罪魁
  2. c语言力扣l最大矩形,leetcode 84柱状图中最大的矩形,利用单调栈求解l
  3. C#委托使用详解(Delegates)
  4. 饿了么口碑活跃用户增长近美团3倍,2020年行业竞争局势将扭转?
  5. python getattr_详解 Python 的二元算术运算,为什么说减法只是语法糖?
  6. C++11 右值引用、移动语义、完美转发、万能引用
  7. 注意!Python开发中最容易掉进去的10个坑!你遇到过那些
  8. Java学习路线(完整详细版)
  9. X230 安装 EI Capitan 10.11.5 驱动篇
  10. 开源词典软件-GoldenDict
  11. 电脑双屏开机后副屏黑屏_电脑两个显示器怎么设置,电脑显示器黑屏
  12. 我发现微信、知乎、B站,居然都暗藏彩蛋!
  13. Python breakpoint()函数
  14. HTML+CSS+原生JS写一个简易的音乐播放器(仅播放一首歌)
  15. Android 项目实战:智慧北京(黑马)
  16. java工程加包_向java工程添加jar包
  17. 简述计算机视觉中的单眼线索,单眼深度线索
  18. 怎么才能知道条码扫描器哪个好?
  19. CIO与CISO的角色演变
  20. 软件测试代码表,软件测试函数列表功能图程序源代码

热门文章

  1. APUE 头文件apue.h 解决方法
  2. 《高等代数学》(姚慕生),习题1.1:二阶行列式
  3. SAP的Abap培训
  4. 系统集成项目管理工程师和网络工程师哪个好考?
  5. linux启动盘制作
  6. 计算机毕业设计源码分享 题目推荐
  7. win10系统更新服务器太慢了,Win10易升更新系统很慢的解决方法
  8. 搜索百度网盘的小姐姐,云网盘之家
  9. 基于表面肌电信号的连续运动估计之前言(一)
  10. linux脚本写的计算器,Linux bc命令实现数学计算器