从android 2.1版本起引入了动态壁纸的概念,熟悉android的人一定不会陌生。这里解释一个动态壁纸是怎么形成又是怎么工作的。
首先动态桌面的动态体现出这个组件是实时变化的,也就是说有一个后台在不停的刷新这个组件。联想到后台组件首先想到的就是service,从代码角度看,果然如此。每一个动态桌面都继承自WallpaperService,其中必须实现的抽象方法onCreateEngine,返回一个Engine对象,实际上所有的绘图与刷新都是由engine完成,service正是提供engine的部分。
打个比方说,在我们设置一个动态壁纸时有预览,这时启动了一个预览的engine来绘制与刷新,当我们设置了壁纸以后又启动了一个填充整个桌面的engine在实时的绘制与刷新。所以动态壁纸的重点在engine里,这里等下提及。
现在着手创建一个动态壁纸。
第一步创建我们的WallpaperService类,同样在其中创建engine类,engine是WallpaperService的内部类。其中engine中关键的方法有
引用
onCreate(SurfaceHolder surfaceHolder)
有了surfaceholder我们可以获得canvas对象,有了canvas我们就可以绘图
引用
onOffsetsChanged(float xOffset, float yOffset, float xOffsetStep,float yOffsetStep, int xPixelOffset, int yPixelOffset)
屏幕滑动的时候触发此方法
xOffset可以用来判断屏幕序号 百分比的形式,举例说如果你手机上有5个分屏,第一屏这里是0.000,第二屏是0.2000 第三屏是0.4000以此类推
xOffsetStep从字面意义就能理解是步进 同样和你的分屏数有关 如果你的分屏数为5 则每次步进xOffsetStep都是0.20000
xPixelOffset就是实际上像素的移动距离,也就是说移动了多少像素,奇怪的是这里左右移动像素点的offset都为负数
引用
public void onVisibilityChanged(boolean visible)
当动态壁纸的可见性发生变化时触发此方法,举例说在桌面上时,动态壁纸的visibility为true,当你运行某个程序的时候动态壁纸的visibility变为false,这里很好理解
引用
public Bundle onCommand(String action, int x, int y, int z, Bundle extras, boolean resultRequested)
可以监听点击事件,点击时触发此方法,action为 android.wallpaper.tap,x记录了横坐标,y记录了纵坐标,z的作用未知,可能是为3d桌面预留下的? 没有试验过,z一般为0
还有一些重要的生命周期方法,和activity类似,就不多说了。
当你要将一个app定义为动态壁纸时,首先需要在AndroidManifest.xml中进行指定,前面提到过,动态壁纸是从 android 2.1 开始支持,所以需要添加
引用
<uses-sdk android:minSdkVersion="7" />
由于还要对系统说明这是一个动态壁纸,我们还要加入
<uses-feature android:name="android.softwate.live_wallpaper"/>
除此之外,由于我们运行了service,所以同样需要对service进行配置
引用
<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>
比较重要的部分首先是权限android:permission="android.permission.BIND_WALLPAPER"
其次service需要响应action
android:name="android.service.wallpaper.WallpaperService
再就是配置文件了
<meta-data android:name="android.service.wallpaper" android:resource="@xml/livepaper"/>
接下来接收配置文件。首先在res文件夹下建立一个xml目录,和写appwidget一样。
在目录下我们创建一个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 是系统要求这么写的,带上命名空间。
引用
android:settingsActivity="LiveWallPreference"
指定配置动态壁纸的PreferenceActivity,这个PreferenceActivity同样需要在AndroidManifest.xml中注册,不过和一般的activity一样。当我们点击动态壁纸的设置按钮时,导向这个activity。不可缺少,否则点击设置会报错。
引用
android:thumbnail="@drawable/ic_launcher"
android:description="@string/wallpaper_description"
第一个图标对应动态壁纸列表中的图标,第二条description则是图标右边你创建的动态壁纸的名字。
至此动态壁纸的框架就算完成了。接下来只需要在wallpaperservice类中加入刷新机制,加入动态内容,一个动态桌面就完成了。[/size]
分享到:
相关推荐
"android动态壁纸源码"指的是提供了一套完整的源代码,用于开发者学习和实现自己的动态壁纸应用。这个实例,CubeLiveWallpaperDemo,是动态壁纸的一个具体示例,它可能包含了创建3D立方体效果的代码。 动态壁纸的...
本教程将深入探讨Android动态壁纸的实现原理,并通过提供的代码样例帮助初学者理解和学习。 动态壁纸的开发主要涉及以下几个关键知识点: 1. **动态壁纸服务**:在Android中,动态壁纸是通过继承`WallpaperService...
《Android 动态壁纸源码解析与学习指南》 Android 动态壁纸是为用户提供个性化桌面体验的一种方式,它能够使用户的手机桌面充满活力,展现出动态的视觉效果。本篇文章将深入探讨一款名为"TouchLiveWallpaper"的动态...
本资源是一个关于Android动态壁纸的源码项目,非常适合计算机科学专业的学生进行毕业设计或者论文研究。下面我们将深入探讨这个源码中的关键知识点。 1. **Android开发环境**:首先,你需要了解Android Studio,这...
安卓的动态壁纸制作方法大全。让你学会如何制作android动态壁纸效果,马上来看看吧。
本篇将详细解析"Android 动态壁纸源码.rar"这个压缩包中的知识点,帮助你理解和开发Android动态壁纸。 1. **动态壁纸基础**: 动态壁纸在Android中是通过实现`WallpaperService`类来创建的。`WallpaperService`是...
在Android平台上,动态壁纸是一种能够展示生动、交互式背景效果的特色功能,它为用户提供了一种自定义手机桌面的新方式。本"android 动态壁纸源码"是一个演示项目,适用于Android 2.2(API级别8)系统,旨在帮助...
Android动态壁纸源码是开发Android应用的一个特殊领域,它允许用户自定义主屏幕背景,使其具有交互性和动画效果。对于想要提升Android开发技能的小白来说,深入研究动态壁纸的源码是一个很好的学习途径。这份源码...
下面我们将详细探讨`WallPaPerService`以及如何开发Android动态壁纸。 ### `WallPaPerService`概述 `WallPaPerService`是Android的Service子类,专门用于提供动态壁纸功能。通过继承`WallPaPerService`,开发者可以...
首先,理解Android动态壁纸(Live Wallpaper)的概念是至关重要的。Android动态壁纸是一种特殊类型的壁纸应用,它不仅展示静态图像,还能展示动画或交互式内容。它们运行在Android系统的壁纸服务中,允许用户自定义...
Android动态壁纸不仅仅是静态图片,而是可以包含动画、交互元素甚至简单逻辑的壁纸。下面,我们将深入探讨Android动态壁纸的相关知识点。 首先,我们要了解Android动态壁纸的工作原理。动态壁纸是基于Android系统的...
【Android动态壁纸开发详解】 Android动态壁纸是一种可以让用户在手机主屏幕上看到动态效果的应用,它不仅限于静态图片,还能展示动画、交互式图形或其他视觉特效。2011.09.21的这篇博客文章深入探讨了如何开发...
"Android动态壁纸模板"是一个非常有价值的资源,尤其对于那些想要涉足Android动态壁纸开发的开发者而言。这个开源项目包含了启动图标和设置页面,使得学习和实践变得更加方便。 首先,我们来看动态壁纸的基本概念。...
本篇内容将深入探讨如何使用LibGDX来制作Android动态壁纸。 首先,我们需要理解动态壁纸在Android中的工作原理。Android动态壁纸允许用户设置一个可交互的背景,它可以是静态图像,也可以是动态效果,比如动画或者...