Hi,大家好,今天给大家分享的是Apad Qzone换肤功能的实现,我们首先看下效果:
图1:默认的皮肤。
图2:点击菜单护肤按钮,应用更换皮肤。
通过上面的效果图可以看出Apad Qzone的换肤功能其实是很简单实现的,由于整个应用采取了单Activity实现方式,更换背景其实就是实现了更换主程序的Activity的背景。
这里我们事先把几套皮肤放在res/drawable目录里,然后用SharedPreferences来记录当前皮肤的资源id。然后在程序启动时加载Activity背景。
为了让大家更容易理解,我这里简单做了一个Demo,步骤分别如下:
第一步:新建一个Android工程命名为SkinDemo。程序结构如下:
第二步:新建一个皮肤管理类SkinSettingManager.java,代码如下:
01
package com.tutor.skindemo;
02
import android.app.Activity;
03
import android.content.SharedPreferences;
04
/**
05
* PadQzone皮肤管理器
06
* @author frankiewei
07
*
08
*/
09
public class SkinSettingManager {
10
public final static String SKIN_PREF = "skinSetting";
11
public SharedPreferences skinSettingPreference;
12
private int[] skinResources = { R.drawable.default_wallpaper,
13
R.drawable.wallpaper_c,R.drawable.wallpaper_d,R.drawable.wallpaper_f,
14
R.drawable.wallpaper_g
15
};
16
private Activity mActivity;
17
public SkinSettingManager(Activity activity) {
18
this.mActivity = activity;
19
skinSettingPreference = mActivity.getSharedPreferences(SKIN_PREF, 3);
20
}
21
/**
22
* 获取当前程序的皮肤序号
23
*
24
* @return
25
*/
26
public int getSkinType() {
27
String key = "skin_type";
28
return skinSettingPreference.getInt(key, 0);
29
}
30
/**
31
* 把皮肤序号写到全局设置里去
32
*
33
* @param j
34
*/
35
public void setSkinType(int j) {
36
SharedPreferences.Editor editor = skinSettingPreference.edit();
37
String key = "skin_type";
38
editor.putInt(key, j);
39
editor.commit();
40
}
41
/**
42
* 获取当前皮肤的背景图资源id
43
*
44
* @return
45
*/
46
public int getCurrentSkinRes() {
47
int skinLen = skinResources.length;
48
int getSkinLen = getSkinType();
49
if(getSkinLen >= skinLen){
50
getSkinLen = 0;
51
}
52
return skinResources[getSkinLen];
53
}
54
/**
55
* 用于导航栏皮肤按钮切换皮肤
56
*/
57
public void toggleSkins(){
58
int skinType = getSkinType();
59
if(skinType == skinResources.length - 1){
60
skinType = 0;
61
}else{
62
skinType ++;
63
}
64
setSkinType(skinType);
65
mActivity.getWindow().setBackgroundDrawable(null);
66
try {
67
mActivity.getWindow().setBackgroundDrawableResource(getCurrentSkinRes());
68
} catch (Throwable e) {
69
e.printStackTrace();
70
}
71
}
72
/**
73
* 用于初始化皮肤
74
*/
75
public void initSkins(){
76
mActivity.getWindow().setBackgroundDrawableResource(getCurrentSkinRes());
77
}
78
}
第三步:在应用的主Activity--即SkinDemoActivity.java调用,代码如下:
01
package com.tutor.skindemo;
02
import android.app.Activity;
03
import android.os.Bundle;
04
import android.view.MotionEvent;
05
public class SkinDemoActivity extends Activity {
06
private SkinSettingManager mSettingManager;
07
@Override
08
public void onCreate(Bundle savedInstanceState) {
09
super.onCreate(savedInstanceState);
10
setContentView(R.layout.main);
11
//初始化皮肤
12
mSettingManager = new SkinSettingManager(this);
13
mSettingManager.initSkins();
14
}
15
//这里为了简单实现,实现换肤
16
@Override
17
public boolean onTouchEvent(MotionEvent event) {
18
mSettingManager.toggleSkins();
19
return super.onTouchEvent(event);
20
}
21
}
以上三步就大功告成啦