Android自定义动态壁纸开发
发布时间:2025-05-15 11:15:51 发布人:远客网络
一、Android自定义动态壁纸开发
看到有些手机酷炫的动态壁纸,有没有好奇过他们是如何实现的,其实我们自己也可以实现。
如果你了解使用过SurfaceView的话,那么开发一款动态壁纸对你来说其实非常简单。
动态壁纸的本质其实就是一个服务在维护一个动态壁纸引擎Engine,所以我们看到的动态效果其实是通过这个引擎画出来的。而维护这个引擎的服务,就是WallpaperService。本篇文章并不讨论内部实现原理,只是让大家知道如何去实现动态壁纸,所以就不详细说了。
创建自定义WallpaperService继承WallpaperService
在Manifest中注册该Service并添加相关属性
一定要添加的几个地方:permission、intent-filter、meta-data。
这个xml文件就是Manifest中meta-data中的resource需要的文件:
需要注意第二个属性:settingsActivity,这个属性可以设置也可以不设置,他是启动一个设置动态壁纸的界面,一般情况下其实用不到这个界面,我们一般会使用PreferenceActivity去实现。下面是添加该属性和不添加该属性的区别:
完成这些之后,就是我们设计动态壁纸的时候了。回到自定义的Wallpaper类中:
我们当时在类中自定义了一个内部类MyEngine继承自Engine。这个Engine就是用来绘制的。关于Engine的几个主要方法如下:
onOffsetsChanged要注意一下,还记得有的手机滑动桌面时候背景图片会跟着左右移动吗,这个方法就可以实现这个效果,在手势滑动的每一帧都会回调依次。一下是个人理解的参数的含义:
xOffset:x方向滑动的百分比(与桌面分页数有关)
yOffset:y方向滑动百分比(一般用不到)
xOffsetStep:x方向每个分页所占的百分比(1/ xOffsetStep=桌面的分页数)
xPixelOffset:x放下像素偏移量
实现绘制的方式,就跟SurfaceView的绘制一样了:
我只是简单的话了一个红色背景,效果如下:
当然可以实现很多不同的效果,这个就根据不同的需求去实现了。
二、android 怎么让live wallpaper动态壁纸运行起来
在Android 2.1中,Live Wallpapers动态壁纸的引入极大地提升了Android桌面的动态效果。如果你希望开发一个具有动态效果的Android桌面,可以遵循以下步骤。
首先,使用Eclipse创建一个标准的Android工程,选择合适的包名,如cn.com.android123.cwj。进入工程的/res/文件夹,删除layout这个文件夹,因为对于Live Wallpaper来说,传统的布局文件并不需要。
接着,可以添加一个动态壁纸的设置界面。在/res/文件夹中新建一个名为xml的文件夹,并新建一个utf8编码的xml文件,命名为livewallpaper.xml。文件内容如下:
<?xml version="1.0" encoding="utf-8"?>
<activity android:name="cn.com.android123.cwj.LiveWallpaperSettings"/>
<icon>/res/drawable/icon</icon>
此外,还需创建一个xml文件用于LiveWallpaperSettings这个Activity的布局,命名为livewallpaper_settings.xml,内容如下:
<PreferenceScreen xmlns:android="">
<ListPreference android:key="listpref_key" android:title="ListPreference" android:entries="@array/listpref_entries" android:entryValues="@array/listpref_values"/>
然后,创建一个名为LiveWallpaper的类作为动态壁纸的主类,从WallpaperService父类继承。这里可以像写标准Android服务那样开发。
新建类LiveWallpaperSettings从 PreferenceActivity继承实现我们的设置界面,代码如下:
public class LiveWallpaperSettings extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener{
protected void onCreate(Bundle icicle){
getPreferenceManager().setSharedPreferencesName(LiveWallpaper.SHARED_PREFS_NAME);
addPreferencesFromResource(R.xml.livewallpaper_settings);
getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key){
同时在androidmanifest.xml中加入如下代码:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="" package="cn.com.android123.cwj" android:versionCode="1" android:versionName="1.0">
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="12"/>
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name="cn.com.android123.cwj.LiveWallpaperSettings" android:label="@string/app_name"/>
<service android:name="cn.com.android123.cwj.LiveWallpaper"/>
<meta-data android:name="android.app.wallpaper" android:resource="@drawable/icon"/>
此外,由于Android动态壁纸是2.1 API Level为7才加入的,所以设置好minSDK以及需要设备支持动态壁纸。还需在androidmanifest.xml中加入如下代码:
<uses-feature android:name="android.software.live_wallpaper"/>
最后,对于文中ListPreference用到的数组,及代码中涉及的颜色数组,需要在/res/values/文件夹中创建一个名为testpatterns.xml的文件,内容如下:
<string-array name="listpref_entries">
<item>Color Bars 16x9</item>
<item>Color Bars 4x3</item>
<item>EBU Color Bars</item>
<item>smtpe</item>
<string-array name="listpref_values">
<item>0xFF696969</item>
<item>0xFFC1C1C1</item>
<item>0xFFC1C100</item>
<item>0xFF00C1C1</item>
<item>0xFF00C100</item>
<item>0xFFC100C1</item>
<item>0xFFC10000</item>
<item>0xFF0000C1</item>
<item>0xFF696969</item>
<item>0xFF00FFFF</item>
<item>0xFFFFFF00</item>
<item>0xFF052550</item>
<item>0xFF36056D</item>
<item>0xFF0000FF</item>
<item>0xFFFF0000</item>
<item>0xFFC1C1C1</item>
<item>0xFF2B2B2B</item>
<item>0xFF050505</item>
<item>0xFFFFFFFF</item>
<item>0xFF050505</item>
<item>0xFF000000</item>
<item>0xFF050505</item>
<item>0xFF0A0A0A</item>
<item>0xFF050505</item>
<item>0xFF0D0D0D</item>
<item>0xFF050505</item>
<item>0xFF2b2b2b</item>
三、android怎样设置锁屏壁纸
最近笔者身边一朋友在手机刷机的情况,不小心将手机刷成了砖,开机无法进入系统,并且进入Recovery模式后,也无法找到刷机选项,后面无奈,只有拿手机去修了,由于手机配置较低,花50元修理好后,发现换的系统为安卓原生2.2系统,锁屏界面基本都是黑色,毫无特色。但又不知道安卓锁屏壁纸怎么换,因此向小编询问了这个问题,鉴于可能还有不少小白朋友也对安卓锁屏壁纸设置不是很懂,接下来本文针对安卓小白朋友,分享下安卓锁屏壁纸设置教程。安卓锁屏壁纸怎么换安卓锁屏壁纸设置教程其实安卓手机更换锁频壁纸相当简单,我们基本只需要更换桌面壁纸或者更换一个主题后,锁频壁纸就跟着变了,以下我们一起来详细看看:安卓锁屏壁纸设置步骤: 1、首先解锁进入安卓手机界面,然后按手机上的“田”自键,弹出如下图设置选项,我们选择“设置”如下图: 2、进入手机设置之后,我们再选择进入“显示”,如下图:安卓锁屏壁纸设置教程 3、进入显示设置之后,我们还可以在里边找到“壁纸设置”选择进入即可,如下图:进入安卓手机壁纸设置 4、之后会要求我们选择壁纸,如果大家要更换锁频壁纸样式,不妨选择“动态壁纸”,如下图: 5、在动态壁纸设置里边找到一个自己喜欢的动态壁纸主题,如下图:我们找到自己喜欢的一个,然后选择设置为壁纸即可,如下图: 6、最后我们即可看到锁屏壁纸以及桌面壁纸都换了,如下图:安卓锁屏壁纸更换后的效果怎么样,这样我们是不是就成功更换了安卓锁频壁纸呢。类似阅读:iPhone怎么设置壁纸 iPhone手机更换壁纸教程