在android中我们一般设置静态壁纸,使用WallpaperManager可以轻松达到目的,但是使用WallpaperManager是不能够设置动态壁纸的,为此android提供了一个WallpaperService专门用来设置动态壁纸,那么我们就用几个简单的步骤来说明一下如何简单的定义一个动态壁纸。

1.新建一个资源文件wallpaper.xml

首先在xml目录下面新建一个wallpaper.xml的资源描述文件.

android:description="@string/wallpaper_name"

android:thumbnail="@mipmap/ic_launcher_round" />

这个xml的标签必须是wallpaper,description用于对当前壁纸的描述,可选。thumbnail用于表示当前壁纸的缩略图,一般在launcher或者设置中设置动态壁纸的时候会显示。

2.继承WallpaperService类

public class MyWallpaperService extends WallpaperService {

@Override

public Engine onCreateEngine() {

return new MyEngine();

}

private class MyEngine extends Engine {

@Override

public void onCreate(SurfaceHolder surfaceHolder) {

super.onCreate(surfaceHolder);

}

@Override

public void onSurfaceCreated(SurfaceHolder holder) {

super.onSurfaceCreated(holder);

Canvas canvas = holder.lockCanvas();

Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);

p.setStrokeWidth(10);

p.setColor(Color.BLUE);

canvas.drawLine(0, 0, 100, 100, p);

holder.unlockCanvasAndPost(canvas);

}

@Override

public void onVisibilityChanged(boolean visible) {

super.onVisibilityChanged(visible);

}

@Override

public void onSurfaceDestroyed(SurfaceHolder holder) {

super.onSurfaceDestroyed(holder);

}

@Override

public void onDestroy() {

super.onDestroy();

}

}

}

WallpaperService这个类没有太多的接口功能供我们调用,最重要的方法是onCreateEngine,我们必须在这个方法中返回一个壁纸的引擎,我们所有的绘制任务都需要在这个引擎中完成。返回的Engine对象是WallpaperService的一个内部类,在这个方法中有大量的回调方法用来帮助我们完成我们的绘制逻辑,最重要的方法包括onSurfaceCreated、onVisibilityChanged、onSurfaceDestroyed等,这些回调方法的功能还是很好理解的,在这里我们在壁纸层的surface创建之后绘制一个直线,无须赘述。

3.声明androidmanifest.xml

WallpaperService也是一个service,所以也需要在清单文件中声明,这里声明需要注意permission和meta-data的声明,格式比较固定,所以也不用多说了。

package="com.coolspan.livewallpaper">

android:allowBackup="true"

android:icon="@mipmap/ic_launcher"

android:label="@string/app_name"

android:roundIcon="@mipmap/ic_launcher_round"

android:supportsRtl="true"

android:theme="@style/AppTheme">

android:name=".service.LiveWallpaperService"

android:enabled="true"

android:label="@string/wallpaper_name"

android:permission="android.permission.BIND_WALLPAPER">

android:name="android.service.wallpaper"

android:resource="@xml/my_wallpaper" />

4.启动

一般这样就可以在launcher或者设置中启动了,这里我们使用一个Activity来启动到设置的界面

Intent localIntent = new Intent();

localIntent.setAction(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);//android.service.wallpaper.CHANGE_LIVE_WALLPAPER

localIntent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT

, new ComponentName(this.getApplicationContext().getPackageName()

, MyWallpaperService.class.getCanonicalName()));

this.startActivity(localIntent);

设置完成之后,桌面就显示了~

android经典动态壁纸,android中自定义动态壁纸相关推荐

  1. linux编译动态库未定义,自定义动态库 对‘*’未定义的引用解决方法

    自定义动态库 对'*'未定义的引用 本帖最后由 longruliang 于 2015-05-25 16:02:26 编辑 自己编写了一个串口方面的动态库,想写一个测试程序,在编译的时候冒出对'*'未定 ...

  2. php动态写入vue,Vue自定义动态组件使用详解

    这次给大家带来Vue自定义动态组件使用详解,Vue自定义动态组件的注意事项有哪些,下面就是实战案例,一起来看一下. 现在基于vue的UI组件库有很多,比如iview,element-ui等.但有时候这 ...

  3. java动态代理_Java中的动态代理一

    方法newProxyInstance介绍 这篇开始学Java中的动态代理部分,刚开始,我们不去了解什么是动态代理相关的概念,除了动态代理,还有静态代理.我们学习动态代理直接从学习一个方法开始,这个方法 ...

  4. php 动态网格,ZBrush中的动态网格该怎么进行运用

    DynaMesh是ZBrush最新的基础模型创建工具,该命令用于基本模型的起稿到中模的制作.使用DynaMesh完全不启用考虑模型的拓扑,可以从一个图形拉扯出整个模型的分支,本文将以一个实例简单介绍Z ...

  5. css如何动态计算,CSS中的动态计算

    自从CSS的calc()函数得到浏览器的支持起,在CSS中就可以做一些简单的数学运算.如果你阅读过 图解CSS系列 中的 <CSS函数>一文的话,你会发现现在或将来有更多的函数可以直接帮助 ...

  6. android sqlite fts4,在Sqlite中创建动态FTS4表

    我一直在努力通过使用视图使我的sqlite DB更具动态性 . 除了全文搜索表之外,这在所有情况下都有所帮助 . 根据SQLite FTS4文档(https://www.sqlite.org/fts3 ...

  7. python动态方法_python中的动态方法生成

    这是一个元类,它将__getattr__函数从类定义添加回元类本身.这就避免了在多个地方定义函数,或者作为预先定义并单独添加到元类和类中的单独全局函数来定义.在class Meta(type): de ...

  8. Android 经典 Crash 分析,Android Crash 原理分析

    android 中最重要的就是 Handler 机制了,简单来说 Handler 机制就是在一个死循环内部不断取走阻塞队列头部的 Message,这个阻塞队列在主线程中是唯一的,当没有 Message ...

  9. 动态改变_Excel中如何动态改变可编辑区域?

    有这样一个工作场景:我们制作一个工作报表模板给同事填写数据,这个工作表格只可以在预设的可编辑区域编辑,其它都是受密码保护的,而且这个可编辑区域是随着日期--工作周的变化而发生变化的.也就是说在不同的工 ...

  10. java如何实现动态时钟_java中的动态时钟

    你需要做的是使用Swing的 Timer课程. 让它每秒运行一次,并用当前时间更新时钟. Timer t = new Timer(1000, updateClockAction); t.start() ...

最新文章

  1. 【转】ASP.NET中“字母和数字混合的验证码”详解
  2. 排序算法汇总——转载自http://blog.csdn.net/zhanglong_daniel/article/details/52513058
  3. 深入学习jQuery鼠标事件
  4. python打地鼠游戏代码_妈妈和宝宝在家,自己做了个打地鼠游戏,网友:宝宝笑得好开心...
  5. 【企业管理】人力资源-华为实践
  6. UIControl事件---iOS-Apple苹果官方文档翻译
  7. Date类的构造方法和成员方法
  8. 我不是码神!Serverless真的可以为所欲为?
  9. 匿名用户访问用发布站点模板创建网站的列表项时要求登录的问题解决
  10. AttributeError: 'NoneType' object has no attribute 'astype'
  11. 创龙DSP6748开发板驱动LCD屏
  12. MVC进阶学习--个性化目录结构(三)
  13. 【Flutter】基础组件【01】Text
  14. JAVA中整型常量的长度_以下的 能正确表示Java语言中的一个整型常量。_学小易找答案...
  15. 如何写PRD (附PRD案例)
  16. Zabbix监控之从zookeeper中获取Kafka消费进度和lag
  17. PySpark线性回归与广义线性模型
  18. 新手福音!最全面的易懂CSS总结,一篇博文让你了解CSS,动一动小手收藏吧
  19. 安装ao2011 服务器为空,`畅捷通T+`财务数据导入AO2011的解决方法
  20. [kubernetes]-挂载nfs出错排查

热门文章

  1. CrystalReports水晶报表中的组
  2. 一、从0开始——黑客学习路线
  3. 禁止百度云盘p2p后台上传
  4. 读取肌电数据,构建模型训练数据
  5. 当电脑接双屏扩展显示器时,系统崩溃,QQ浏览器出现显示异常,通过如下方法使之正常
  6. dependencyManagement 失效
  7. TOMCAT8 设置 请求超时时间 和 最大连接数
  8. 大写日期转换器(大写日期转换器)
  9. android 1024 github,1024 怎么能少了这款高颜值、敲实用的 GitHub 第三方客户端呢?...
  10. 怎么把度分秒化成小数_角度的度分秒与小数点格式互相转换