永发信息网

动态桌面运行原理

答案:3  悬赏:30  手机版
解决时间 2021-03-06 02:12
  • 提问者网友:杀手的诗
  • 2021-03-05 11:43
动态桌面运行原理
最佳答案
  • 五星知识达人网友:行雁书
  • 2021-03-05 12:25
动态壁纸为:在手机上点击 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调用之后会立即调用该方法。
全部回答
  • 1楼网友:愁杀梦里人
  • 2021-03-05 14:11
:原理 动态壁纸为:在手机上点击 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调用之后会立即调用该方法。
  • 2楼网友:千杯敬自由
  • 2021-03-05 13:42
我也不太清楚,我原来用过的,费内存,影响机子的速度
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯