
在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"?>
<wallpaper>
<activity android:name="cn.com.android123.cwj.LiveWallpaperSettings" />
<icon>/res/drawable/icon</icon>
</wallpaper>
此外,还需创建一个xml文件用于LiveWallpaperSettings这个Activity的布局,命名为livewallpaper_settings.xml,内容如下:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<ListPreference android:key="listpref_key" android:title="ListPreference" android:entries="@array/listpref_entries" android:entryValues="@array/listpref_values" />
</PreferenceScreen>
然后,创建一个名为LiveWallpaper的类作为动态壁纸的主类,从WallpaperService父类继承。这里可以像写标准Android服务那样开发。
新建类LiveWallpaperSettings从 PreferenceActivity 继承实现我们的设置界面,代码如下:
public class LiveWallpaperSettings extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
getPreferenceManager().setSharedPreferencesName(LiveWallpaper.SHARED_PREFS_NAME);
addPreferencesFromResource(R.xml.livewallpaper_settings);
getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onDestroy() {
getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
super.onDestroy();
}
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
}
}
同时在androidmanifest.xml中加入如下代码:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/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"/>
</application>
</manifest>
此外,由于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>
<item>bars</item>
<item>ebu</item>
</string-array>
<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>
</string-array>