Android编程之动态壁纸实例分析

 更新时间:2015年12月03日 12:25:59   作者:wiseideal  
这篇文章主要介绍了Android编程之动态壁纸实现方法,以实例形式分析了Android动态壁纸的原理与实现步骤,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了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类中加入刷新机制,加入动态内容,一个动态桌面就完成了。

希望本文所述对大家Android程序设计有所帮助。

相关文章

  • Android SharedPreference存储文件三步走

    Android SharedPreference存储文件三步走

    SharedPreferences是安卓平台上一个轻量级的存储类,用来保存应用的一些常用配置,比如Activity状态,Activity暂停时,将此activity的状态保存到SharedPereferences中;当Activity重载,系统回调方法onSaveInstanceState时,再从SharedPreferences中将值取出
    2023-01-01
  • Flutter实现渐变色加描边字体效果

    Flutter实现渐变色加描边字体效果

    这篇文章介绍了Flutter实现渐变色描边字体效果的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-11-11
  • Android Insets相关知识总结

    Android Insets相关知识总结

    这篇文章主要介绍了Android Insets相关知识总结,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下
    2021-03-03
  • ijkplayer打包支持https的so使用详解

    ijkplayer打包支持https的so使用详解

    这篇文章主要为大家介绍了ijkplayer打包支持https的so使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Android ListView分页简单实现

    Android ListView分页简单实现

    这篇文章主要介绍了Android ListView分页简单实现的相关资料,需要的朋友可以参考下
    2017-06-06
  • Android应用中炫酷的横向和环形进度条的实例分享

    Android应用中炫酷的横向和环形进度条的实例分享

    这篇文章主要介绍了Android应用中炫酷的横向和圆形进度条的实例分享,文中利用了一些GitHub上的插件进行改写,也是一片很好的二次开发教学,需要的朋友可以参考下
    2016-04-04
  • Android手机屏幕同步工具asm.jar

    Android手机屏幕同步工具asm.jar

    今天小编就为大家分享一篇关于Android手机屏幕同步工具asm.jar的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • Android编程获取组件尺寸大小的方法

    Android编程获取组件尺寸大小的方法

    这篇文章主要介绍了Android编程获取组件尺寸大小的方法,结合实例形式分析了Android绘制组件之前获取该组件大小的3种常见操作技巧,需要的朋友可以参考下
    2017-03-03
  • Android编程实现根据经纬度查询地址并对获取的json数据进行解析的方法

    Android编程实现根据经纬度查询地址并对获取的json数据进行解析的方法

    这篇文章主要介绍了Android编程实现根据经纬度查询地址并对获取的json数据进行解析的方法,结合实例形式分析了Android的经纬度地址解析与json格式数据操作相关技巧,需要的朋友可以参考下
    2017-02-02
  • Android编程中全局变量问题分析

    Android编程中全局变量问题分析

    这篇文章主要介绍了Android编程中全局变量,较为详细的分析了全局变量的功能并结合案例形式讲述了全局变量所引起的问题及相应的解决技巧,需要的朋友可以参考下
    2016-11-11

最新评论