永发信息网

动态桌面运行原理

答案:3  悬赏:30  手机版
解决时间 2021-03-06 02:12
动态桌面运行原理
最佳答案
动态壁纸为:在手机上点击 Menu→Wallpapers→Live wallpapers→然后打开自己的程序。建个最简单的动态壁纸的步骤如下:

1.在rex/xml中新建一个.xml.其中注册一个wallpaper.假设这个名字为ab.xml(下文要用到,可随意设置,没要求)

最简单的就是写 这一句,这样的话打开动态壁纸就会出现只出现一个按钮(左图),一般我们不这样做,要像右图这样子。

Android 动态壁纸原理 及 例子 Android 动态壁纸原理 及 例子

若动态壁纸"设置..."(Setting...)你想连接Activity,也在这里指定,比如:

android:settingsActivity="com.birbeck.wallpaperslideshow.SettingsActivity" (这个一般是继承了PreferenceActivity类的Activity。就是首选项模式的类),要设置了这个属性,就会如有图所示了。

Android 动态壁纸原理 及 例子

如上截图是手机上的动态壁纸列表,你也可以通过android:description=“XXX”来设置描述,通过anroid:thumbnail="XX"来设置该动态壁纸的图片。

2.接下来要在manifest中注册一个service。

XXX

在这个servier中要指定你继承WallpaperService类的路径,指定1中设置的xml,设置广播,设置允许权限等。比如:

通过android:name="com.bn.ex12f.Sample12_6_WallPaper"指定继承WallpaperService的类 ,

通过android:permission="android.permission.BIND_WALLPAPER">是让该service有能设置为壁纸的权限,没有的话该壁纸只能被预览。

这一种还必须设置一个,用来监听Android系统发出的动态壁纸的广播。

3、怎样实现WallpaperService?
WallpaperService与其他的service唯一的不同就是,你必须要增加一个方法onCreateEngine(),它会返回一个WallpaperService.Engine,这个engine才是负责绘制壁纸以及响应与用户交互事件的核心部件。这个service代码结构如下:
view plaincopy to clipboardprint?

public class TimeWall extends WallpaperService {

public Engine onCreateEngine() {
return new TimeEngine();
}

public class TimeEngine extends Engine {
// ...more code
}
}

在这个方法里只需返回一个Engine的子类对象就可以了。所以重头戏,写动态壁纸程序的主要工作量就是实现Engine的子类。

类TimeEngine才是处理壁纸的核心类,我们会在类TimeEngine中加上自己的逻辑以完成壁纸的绘制、变化以及销毁。Engine的生命周期与大多数OPhone应用程序组件,比如activity类似,都是从onCreate()开始,在销毁时调用onDestory()方法。不同的是WallpaperService会提供一个surface用来绘制壁纸,所以在生命周期中多一个onSurfaceCreated与onSurfaceDestroyed的过程。下面是一个最简生命周期:

也就是说只要我们实现上面四个方法,一个基本的LiveWallpaper就可以完成了。

4.实现Engine的子类

简而言之,该类的作用就是让你去实现动态壁纸的具体代码。以上三点可认为是格式化的一些东西。这个类不需要强制继承任何方法,现在简述一下一般要重写的方法的功能。

public void onCreate(SurfaceHolder surfaceHolder){...}

public void onDestroy(){...}这俩方法就不说明了

public void onVisibilityChanged(boolean visible)

{
if(visible)//如果可见
{
...
}
else//如果不可见
{

...
}
}该方法作用是当前动态壁纸可见时要画图。重写这个方法一般如以上格式所示。

public void onSurfaceCreated(SurfaceHolder holder) //重写onSurfaceCreated方法
{
super.onSurfaceCreated(holder);//调用父类对应方法
}该方法是应用程序第一次创建时要调用。可在这个方法里调用父类对应方法。该方法执行完毕后系统会立即调用onSurfaceChanged方法(如下)。若在这里调用父类对应方法,那么就在onSurfaceChanged中实现主要功能。

public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height)

{

...

}该方法有两个用处。1.若动态壁纸要随着横屏竖屏而切换可在这里写。2.想和用户交互的话,比如用户滑动屏幕时,点击屏幕时等。3.注意:onSurfaceCreated调用之后会立即调用该方法。
全部回答
:原理 动态壁纸为:在手机上点击 Menu→Wallpapers→Live wallpapers→然后打开自己的程序。建个最简单的动态壁纸的步骤如下: 1.在rex/xml中新建一个.xml.其中注册一个wallpaper.假设这个名字为ab.xml(下文要用到,可随意设置,没要求) 最简单的就是写 这一句,这样的话打开动态壁纸就会出现只出现一个按钮(左图),一般我们不这样做,要像右图这样子。 Android 动态壁纸原理 及 例子 Android 动态壁纸原理 及 例子 若动态壁纸"设置..."(Setting...)你想连接Activity,也在这里指定,比如: android:settingsActivity="com.birbeck.wallpaperslideshow.SettingsActivity" (这个一般是继承了PreferenceActivity类的Activity。就是首选项模式的类),要设置了这个属性,就会如有图所示了。 Android 动态壁纸原理 及 例子 如上截图是手机上的动态壁纸列表,你也可以通过android:description=“XXX”来设置描述,通过anroid:thumbnail="XX"来设置该动态壁纸的图片。 2.接下来要在manifest中注册一个service。 XXX 在这个servier中要指定你继承WallpaperService类的路径,指定1中设置的xml,设置广播,设置允许权限等。比如: 通过android:name="com.bn.ex12f.Sample12_6_WallPaper"指定继承WallpaperService的类 , 通过android:permission="android.permission.BIND_WALLPAPER">是让该service有能设置为壁纸的权限,没有的话该壁纸只能被预览。 这一种还必须设置一个,用来监听Android系统发出的动态壁纸的广播。 3、怎样实现WallpaperService? WallpaperService与其他的service唯一的不同就是,你必须要增加一个方法onCreateEngine(),它会返回一个WallpaperService.Engine,这个engine才是负责绘制壁纸以及响应与用户交互事件的核心部件。这个service代码结构如下: view plaincopy to clipboardprint? public class TimeWall extends WallpaperService { public Engine onCreateEngine() { return new TimeEngine(); } public class TimeEngine extends Engine { // ...more code } } 在这个方法里只需返回一个Engine的子类对象就可以了。所以重头戏,写动态壁纸程序的主要工作量就是实现Engine的子类。 类TimeEngine才是处理壁纸的核心类,我们会在类TimeEngine中加上自己的逻辑以完成壁纸的绘制、变化以及销毁。Engine的生命周期与大多数OPhone应用程序组件,比如activity类似,都是从onCreate()开始,在销毁时调用onDestory()方法。不同的是WallpaperService会提供一个surface用来绘制壁纸,所以在生命周期中多一个onSurfaceCreated与onSurfaceDestroyed的过程。下面是一个最简生命周期: 也就是说只要我们实现上面四个方法,一个基本的LiveWallpaper就可以完成了。 4.实现Engine的子类 简而言之,该类的作用就是让你去实现动态壁纸的具体代码。以上三点可认为是格式化的一些东西。这个类不需要强制继承任何方法,现在简述一下一般要重写的方法的功能。 public void onCreate(SurfaceHolder surfaceHolder){...} public void onDestroy(){...}这俩方法就不说明了 public void onVisibilityChanged(boolean visible) { if(visible)//如果可见 { ... } else//如果不可见 { ... } }该方法作用是当前动态壁纸可见时要画图。重写这个方法一般如以上格式所示。 public void onSurfaceCreated(SurfaceHolder holder) //重写onSurfaceCreated方法 { super.onSurfaceCreated(holder);//调用父类对应方法 }该方法是应用程序第一次创建时要调用。可在这个方法里调用父类对应方法。该方法执行完毕后系统会立即调用onSurfaceChanged方法(如下)。若在这里调用父类对应方法,那么就在onSurfaceChanged中实现主要功能。 public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) { ... }该方法有两个用处。1.若动态壁纸要随着横屏竖屏而切换可在这里写。2.想和用户交互的话,比如用户滑动屏幕时,点击屏幕时等。3.注意:onSurfaceCreated调用之后会立即调用该方法。
我也不太清楚,我原来用过的,费内存,影响机子的速度
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我就想问问 各位广大男性同胞如何看待你身边
问下又会作曲又会作词的歌手有多少啊?
美乐综合商店地址在什么地方,想过去办事
未成年人刑罚完毕后,再次犯罪,是否属于累犯
车辆商业险多少钱
苻坚大家怎么读,是fu,还是pu
我脑子太笨连入门都学不清楚哪位同学给我举个
我把u盘改成磁盘驱动器了请问怎么才能还原成u
是爱人还是朋友 歌词
当一个女生不再进一个男生空间,说明了什么
兄弟小镇在什么地方啊,我要过去处理事情
苏教九年级上册英语unit1单词朗读
任何单位和个人都不得擅自改变城市()的性质。
他不准我哭,怎么可以哭,分手都应有一脸笑容,
晚上手机如何省电?
推荐资讯
求宠物小精灵漆黑的魅影5.0手机版本的一周目
dnf。50w的婚礼和200w的婚礼有什么区别
In the day not having you,I be fond o
市府街社区卫生服务站地址在哪,我要去那里办
美宜佳K115怎么去啊,有知道地址的么
不是大富大贵但殷实是什么意思 一般有多少钱
=ROUND(RAND()*(1.53-1.49)+1.49,
趣味题(字谜、对联、成语、名言)1.猜字谜(1)
顺河回族区东郊乡后台村村民委员会地址在哪,
如何做个优秀的电话访问员?
下列与下边漫画《没有用了》(改编自薛飞《无
口子贷款招代理吗 能赚钱吗
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?