一、简介:
正如别人所说的一样:动态壁纸是一个Android应用程序,包括一个服务(WallpaperService)。该服务必须包括一个引擎(WallpaperService.Engine)。该引擎是连接用户、桌面、系统之间的桥梁。它也可以绘制桌面壁纸。动态壁纸是一个apk应用,但是不同的是这个在我们实现的时候可以不用activity
二、权限与声明:
在AndroidManifest.xml中添加权限android:permission=
"android.permission.BIND_WALLPAPER",否则该壁纸只能预览,不能被实际应用
在AndroidManifest.xml中添加声明android:name=
"android.service.wallpaper.WallpaperService"以便系统识别(后面代码中可见)
三、操作:
1.创建一个android工程(没有activity和布局文件的空工程)——MyWallPaper
2.在src下创建包com.mywallpaper.service,并创建一个服务类-MyWallPaperService
3.在AndroidManifest.xml中配置服务的信息
其中android:name是你的service的包类路径;
android:icon是在动画壁纸列表中显示的图标(相当于应用列表中的图标)
android:label:壁纸的标签,相当于一个应用的名称
android:resource="@xml/mywallpaper"是其信息,接下来实现。
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <service android:name="com.mywallpaper.service.MyWallpaperService" android:enabled="true" android:icon="@drawable/icon" android:label="@string/app_name" android:permission="android.permission.BIND_WALLPAPER" > <intent-filter android:priority="1" > <action android:name="android.service.wallpaper.WallpaperService" /> </intent-filter> <meta-data android:name="android.service.wallpaper" android:resource="@xml/mywallpaper" /> </service> </application>
4.壁纸信息实现:在res目录下创建文件夹xml,添加xml文件mywallpaper.xml如下内容:
其中android:description是描述;后面两行信息可以不用
<wallpaper xmlns:android="http://schemas.android.com/apk/res/android" android:thumbnail="@drawable/icon" android:description="@string/description" />
5.MyWallPaperService的实现:
5.1 继承WallPaperService并实现其方法
5.2 创建内部类MyEngine并继承Engine;
5.3 提供初始化图片的方法
/** * 初始图片 */ public void initImg() { backgound = BitmapFactory.decodeResource(this.getResources(), R.drawable.backgound); }
5.4 提供绘画的方法
/** * 绘画的方法 */ private void draw(){ SurfaceHolder holder = engine.getSurfaceHolder(); Canvas canvas = holder.lockCanvas(null); if (canvas != null) { canvas.drawBitmap(backgound, 0, 0, null); } holder.unlockCanvasAndPost(canvas); }
5.5 engine中创建时初始化图片
private final Paint paint = new Paint(); // 创建画笔 @Override public void onCreate(SurfaceHolder surfaceHolder) { super.onCreate(surfaceHolder); paint.setAntiAlias(true);// 打开抗锯齿 initImg();// 初始化位图资源 } }
5.6 surface被创建时绘图
/** * 该方法是应用程序第一次创建时要调用。可在这个方法里调用父类对应方法。 * 该方法执行完毕后系统会立即调用onSurfaceChanged方法 */ @Override public void onSurfaceCreated(SurfaceHolder holder) { // TODO Auto-generated method stub super.onSurfaceCreated(holder); draw(); }
6.至此即可运行:
相关推荐
不管你是想将已经存在的原生代码应用移植到Android平台上还是准备开始在Android平台上进行软件开发,使用《Android C++高级编程——使用NDK》一书提供的技术可以构建更出色的应用。本书将展示构建性能更好的复杂原生...
Android源码——动态壁纸源码.7z
还有几十个电子书 和 源代码 请点击 我的名字 都是最近半年收集的android 开发资料和源代码,挑选出好的给大家
安卓Android源码——高仿墨迹天气背景动画效果-云,风,雪等.rar
安卓Android源码——高仿墨迹天气背景动画效果-云,风,雪等.zip
即实战演练的全部代码,加图片资源。
Android进阶——框架打造之IOC框架 实现通过Id找到控件的功能 实现通过Id找到Color、String资源 实现绑定view的点击事件、长按事件 实现绑定SetContentView 实现绑定网络的检测功能
VirtualLayout是一个针对RecyclerView的LayoutManager扩展, 主要提供一整套布局方案和布局间的组件复用的问题。
安卓Android源码——安卓Android快速框架+多线程下载框架的技术(安卓Android + Afinal+gson).rar
Android中文翻译组——Android开发者指南(1)Android中文翻译组——Android开发者指南(1)
本案例为3D水族馆动态壁纸,在该壁纸中有许多本身有动作并可以自由游动的鱼,地面中有不断一张一合的珍珠贝并一直在冒气泡,可以点击地面给鱼喂食,还有几处珊瑚也在不断地冒出气泡,并随气泡随高度增加而不断变大,...
Android源码——动态壁纸源码.zip
Android数据库框架——Sugar
《Android C++高级编程——使用NDK》提供了Java原生接口(JNI)的概述、Bionic API、POSIX 线程和套接字、C++支持、原生图形和声音API以及NEON/SIMD优化,在一个游戏应用案例的帮助下,你将学到很多关键技能。...
安卓Android源码——动态壁纸源码.zip
Android源码——动态壁纸源码.rar
安卓Android源码——afinal框架实现图片的简单异步缓存加载.zip
服务器端源码。移动端Android应用开发,一款社交类app,叫做”聚友“。该项目详情可以进我主页查看。转到:https://blog.csdn.net/yy2017220302028/article/details/100568254
第1章 Android简介 1.1 手机操作系统 1.2 Android起源 1.3 Android特征 1.4 Android体系结构 1.4.1 应用层 1.4.2 应用框架层 1.4.3 系统库层 1.4.4 内核层 1.5 小结 练习 第2章 Android开发环境 2.1 ...