可爱宝贝下载链接
一、简介:
正如别人所说的一样:动态壁纸是一个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"是其信息,接下来实现。
4.壁纸信息实现:在res目录下创建文件夹xml,添加xml文件mywallpaper.xml如下内容:
其中android: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.至此即可运行: