Hi,大家好,快元旦啦,提前祝大家元旦快乐,(*^__^*) 嘻嘻,今天给大家分享的是Apad Qzone换肤功能的实现,我们首先看下效果:
图1:默认的皮肤.
图2:点击菜单护肤按钮,应用更换皮肤.
通过上面的效果图可以看出Apad Qzone的换肤功能其实是很简单实现的,由于整个应用采取了单Activity实现方式,更换背景其实就是实现了更换主程序的Activity的背景。
这里我们事先把几套皮肤放在res/drawable目录里,然后用SharedPreferences来记录当前皮肤的资源id.然后在程序启动时加载Activity背景。
为了让大家更容易理解,我这里简单做了一个Demo,步骤分别如下:
第一步:新建一个Android工程命名为SkinDemo.程序结构如下:
第二步:新建一个皮肤管理类SkinSettingManager.java,代码如下:
package com.tutor.skindemo; import android.app.Activity; import android.content.SharedPreferences; /** * PadQzone皮肤管理器 * @author frankiewei * */ public class SkinSettingManager { public final static String SKIN_PREF = "skinSetting"; public SharedPreferences skinSettingPreference; private int[] skinResources = { R.drawable.default_wallpaper, R.drawable.wallpaper_c,R.drawable.wallpaper_d,R.drawable.wallpaper_f, R.drawable.wallpaper_g }; private Activity mActivity; public SkinSettingManager(Activity activity) { this.mActivity = activity; skinSettingPreference = mActivity.getSharedPreferences(SKIN_PREF, 3); } /** * 获取当前程序的皮肤序号 * * @return */ public int getSkinType() { String key = "skin_type"; return skinSettingPreference.getInt(key, 0); } /** * 把皮肤序号写到全局设置里去 * * @param j */ public void setSkinType(int j) { SharedPreferences.Editor editor = skinSettingPreference.edit(); String key = "skin_type"; editor.putInt(key, j); editor.commit(); } /** * 获取当前皮肤的背景图资源id * * @return */ public int getCurrentSkinRes() { int skinLen = skinResources.length; int getSkinLen = getSkinType(); if(getSkinLen >= skinLen){ getSkinLen = 0; } return skinResources[getSkinLen]; } /** * 用于导航栏皮肤按钮切换皮肤 */ public void toggleSkins(){ int skinType = getSkinType(); if(skinType == skinResources.length - 1){ skinType = 0; }else{ skinType ++; } setSkinType(skinType); mActivity.getWindow().setBackgroundDrawable(null); try { mActivity.getWindow().setBackgroundDrawableResource(getCurrentSkinRes()); } catch (Throwable e) { e.printStackTrace(); } } /** * 用于初始化皮肤 */ public void initSkins(){ mActivity.getWindow().setBackgroundDrawableResource(getCurrentSkinRes()); } } 第三步:在应用的主Activity--即SkinDemoActivity.java调用,代码如下: package com.tutor.skindemo; import android.app.Activity; import android.os.Bundle; import android.view.MotionEvent; public class SkinDemoActivity extends Activity { private SkinSettingManager mSettingManager; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //初始化皮肤 mSettingManager = new SkinSettingManager(this); mSettingManager.initSkins(); } //这里为了简单实现,实现换肤 @Override public boolean onTouchEvent(MotionEvent event) { mSettingManager.toggleSkins(); return super.onTouchEvent(event); } }以上三步就大功告成啦!,哈哈,很容易吧,今天就讲到这里,提前祝大家元旦快乐!!!