Android 动态壁纸原理 及 例子

最近做动态壁纸的项目,原来觉得动态壁纸是个很小的项目,但是看到Android Market上有个专门的动态壁纸分类(现在升级为Google Play了), 而且自己做的这个项目可连接上服务器,供用户购买下载图片,终于有了自信,认识到这个不算是个小项目了。接下来我主要谈谈动态壁纸的原理,然后会解释一个 “小球的例子”,供大家能深入的理解该原理。

        一:原理

        动态壁纸为:在手机上点击 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">允许动态壁纸权限。

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

还要通过ab" />.这篇文章中主要讲原理和重要的点,源码我会附上的。

3.就是实现继承了WallpaerService的类了。只需要重写WallpaperServiced的onCreateEngine方法。

@Override
        public Engine onCreateEngine()
        {
                ce=new BallEngine();(class BallEngine extends Engine{...})
                return ce;
        }

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

4.实现Engine的子类

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

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

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

public void onVisibilityChanged(boolean visible)

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgzgsz.html