android背景1边有线,android动态壁纸1——初步框架(有背景,能使用,仿可爱宝贝)...

本文详细介绍了如何创建一个Android动态壁纸服务,包括在AndroidManifest.xml中添加必要权限和声明,创建服务类MyWallPaperService,实现Engine以及绘制壁纸的方法。通过这个教程,读者将能够了解动态壁纸的实现过程。
摘要由CSDN通过智能技术生成

可爱宝贝下载链接

一、简介:

正如别人所说的一样:动态壁纸是一个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"是其信息,接下来实现。

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

android:name="com.mywallpaper.service.MyWallpaperService"

android:enabled="true"

android:icon="@drawable/icon"

android:label="@string/app_name"

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

android:name="android.service.wallpaper"

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

4.壁纸信息实现:在res目录下创建文件夹xml,添加xml文件mywallpaper.xml如下内容:

其中android:description是描述;后面两行信息可以不用

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.至此即可运行:

66a5a2dcee647c4047dd6337e1bf0c66.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值