`
wiseideal
  • 浏览: 449178 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

android动态壁纸

阅读更多
从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]
分享到:
评论
1 楼 ctluo111 2014-10-23  
 

相关推荐

    android动态壁纸源码

    "android动态壁纸源码"指的是提供了一套完整的源代码,用于开发者学习和实现自己的动态壁纸应用。这个实例,CubeLiveWallpaperDemo,是动态壁纸的一个具体示例,它可能包含了创建3D立方体效果的代码。 动态壁纸的...

    Android动态壁纸

    本教程将深入探讨Android动态壁纸的实现原理,并通过提供的代码样例帮助初学者理解和学习。 动态壁纸的开发主要涉及以下几个关键知识点: 1. **动态壁纸服务**:在Android中,动态壁纸是通过继承`WallpaperService...

    Android 动态壁纸源码.zip

    《Android 动态壁纸源码解析与学习指南》 Android 动态壁纸是为用户提供个性化桌面体验的一种方式,它能够使用户的手机桌面充满活力,展现出动态的视觉效果。本篇文章将深入探讨一款名为"TouchLiveWallpaper"的动态...

    Android 动态壁纸源码-IT计算机-毕业设计.zip

    本资源是一个关于Android动态壁纸的源码项目,非常适合计算机科学专业的学生进行毕业设计或者论文研究。下面我们将深入探讨这个源码中的关键知识点。 1. **Android开发环境**:首先,你需要了解Android Studio,这...

    android动态壁纸制作

    安卓的动态壁纸制作方法大全。让你学会如何制作android动态壁纸效果,马上来看看吧。

    Android 动态壁纸源码.rar

    本篇将详细解析"Android 动态壁纸源码.rar"这个压缩包中的知识点,帮助你理解和开发Android动态壁纸。 1. **动态壁纸基础**: 动态壁纸在Android中是通过实现`WallpaperService`类来创建的。`WallpaperService`是...

    android 动态壁纸源码

    在Android平台上,动态壁纸是一种能够展示生动、交互式背景效果的特色功能,它为用户提供了一种自定义手机桌面的新方式。本"android 动态壁纸源码"是一个演示项目,适用于Android 2.2(API级别8)系统,旨在帮助...

    Android动态壁纸源码

    Android动态壁纸源码是开发Android应用的一个特殊领域,它允许用户自定义主屏幕背景,使其具有交互性和动画效果。对于想要提升Android开发技能的小白来说,深入研究动态壁纸的源码是一个很好的学习途径。这份源码...

    Android动态壁纸WallPaPerService.zip

    下面我们将详细探讨`WallPaPerService`以及如何开发Android动态壁纸。 ### `WallPaPerService`概述 `WallPaPerService`是Android的Service子类,专门用于提供动态壁纸功能。通过继承`WallPaPerService`,开发者可以...

    Android-在Android上将您的Unity游戏作为动态壁纸运行

    首先,理解Android动态壁纸(Live Wallpaper)的概念是至关重要的。Android动态壁纸是一种特殊类型的壁纸应用,它不仅展示静态图像,还能展示动画或交互式内容。它们运行在Android系统的壁纸服务中,允许用户自定义...

    Android 动态壁纸

    Android动态壁纸不仅仅是静态图片,而是可以包含动画、交互元素甚至简单逻辑的壁纸。下面,我们将深入探讨Android动态壁纸的相关知识点。 首先,我们要了解Android动态壁纸的工作原理。动态壁纸是基于Android系统的...

    2011.09.21——— android 动态壁纸开发

    【Android动态壁纸开发详解】 Android动态壁纸是一种可以让用户在手机主屏幕上看到动态效果的应用,它不仅限于静态图片,还能展示动画、交互式图形或其他视觉特效。2011.09.21的这篇博客文章深入探讨了如何开发...

    Android 动态壁纸模板。

    "Android动态壁纸模板"是一个非常有价值的资源,尤其对于那些想要涉足Android动态壁纸开发的开发者而言。这个开源项目包含了启动图标和设置页面,使得学习和实践变得更加方便。 首先,我们来看动态壁纸的基本概念。...

    LibGDX制作android动态壁纸

    本篇内容将深入探讨如何使用LibGDX来制作Android动态壁纸。 首先,我们需要理解动态壁纸在Android中的工作原理。Android动态壁纸允许用户设置一个可交互的背景,它可以是静态图像,也可以是动态效果,比如动画或者...

Global site tag (gtag.js) - Google Analytics