安卓换肤功能实现

Hi,大家好,快元旦啦,提前祝大家元旦快乐,(*^__^*) 嘻嘻,今天给大家分享的是Apad Qzone换肤功能的实现,我们首先看下效果:

图1:默认的皮肤.

图2:点击菜单护肤按钮,应用更换皮肤.

通过上面的效果图可以看出Apad Qzone的换肤功能其实是很简单实现的,由于整个应用采取了单Activity实现方式,更换背景其实就是实现了更换主程序的Activity的背景。

这里我们事先把几套皮肤放在res/drawable目录里,然后用SharedPreferences来记录当前皮肤的资源id.然后在程序启动时加载Activity背景。

为了让大家更容易理解,我这里简单做了一个Demo,步骤分别如下:

第一步:新建一个Android工程命名为SkinDemo.程序结构如下:

第二步:新建一个皮肤管理类SkinSettingManager.java,代码如下:

[java]  view plain copy
  1. package com.tutor.skindemo;  
  2.   
  3.   
  4. import android.app.Activity;  
  5. import android.content.SharedPreferences;  
  6.   
  7. /** 
  8.  * PadQzone皮肤管理器 
  9.  * @author frankiewei 
  10.  * 
  11.  */  
  12. public class SkinSettingManager {  
  13.   
  14.   
  15.     public final static String SKIN_PREF = "skinSetting";  
  16.       
  17.     public SharedPreferences skinSettingPreference;  
  18.       
  19.     private int[] skinResources = { R.drawable.default_wallpaper,  
  20.             R.drawable.wallpaper_c,R.drawable.wallpaper_d,R.drawable.wallpaper_f,  
  21.             R.drawable.wallpaper_g  
  22.     };  
  23.       
  24.     private Activity mActivity;  
  25.       
  26.       
  27.     public SkinSettingManager(Activity activity) {  
  28.         this.mActivity = activity;    
  29.         skinSettingPreference = mActivity.getSharedPreferences(SKIN_PREF, 3);  
  30.     }  
  31.       
  32.     /** 
  33.      * 获取当前程序的皮肤序号 
  34.      *  
  35.      * @return 
  36.      */  
  37.     public int getSkinType() {  
  38.         String key = "skin_type";  
  39.         return skinSettingPreference.getInt(key, 0);  
  40.     }  
  41.   
  42.     /** 
  43.      * 把皮肤序号写到全局设置里去 
  44.      *  
  45.      * @param j 
  46.      */  
  47.     public void setSkinType(int j) {  
  48.         SharedPreferences.Editor editor = skinSettingPreference.edit();  
  49.         String key  = "skin_type";  
  50.           
  51.         editor.putInt(key, j);  
  52.         editor.commit();  
  53.     }  
  54.       
  55.     /** 
  56.      * 获取当前皮肤的背景图资源id 
  57.      *  
  58.      * @return 
  59.      */  
  60.     public int getCurrentSkinRes() {  
  61.         int skinLen = skinResources.length;  
  62.         int getSkinLen = getSkinType();  
  63.         if(getSkinLen >= skinLen){  
  64.             getSkinLen = 0;  
  65.         }  
  66.           
  67.         return skinResources[getSkinLen];  
  68.     }  
  69.       
  70.     /** 
  71.      * 用于导航栏皮肤按钮切换皮肤 
  72.      */  
  73.     public void toggleSkins(){  
  74.           
  75.         int skinType = getSkinType();  
  76.         if(skinType == skinResources.length - 1){  
  77.             skinType = 0;  
  78.         }else{            
  79.             skinType ++;  
  80.         }  
  81.         setSkinType(skinType);  
  82.         mActivity.getWindow().setBackgroundDrawable(null);  
  83.         try {  
  84.             mActivity.getWindow().setBackgroundDrawableResource(getCurrentSkinRes());  
  85.         } catch (Throwable e) {  
  86.             e.printStackTrace();  
  87.   
  88.         }  
  89.           
  90.           
  91.     }  
  92.           
  93.     /** 
  94.      * 用于初始化皮肤 
  95.      */  
  96.     public void initSkins(){      
  97.         mActivity.getWindow().setBackgroundDrawableResource(getCurrentSkinRes());  
  98.     }  
  99.   
  100. }  
第三步:在应用的主Activity--即SkinDemoActivity.java调用,代码如下:

[java]  view plain copy
  1. package com.tutor.skindemo;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.view.MotionEvent;  
  6.   
  7. public class SkinDemoActivity extends Activity {  
  8.       
  9.     private SkinSettingManager mSettingManager;  
  10.       
  11.     @Override  
  12.     public void onCreate(Bundle savedInstanceState) {  
  13.         super.onCreate(savedInstanceState);  
  14.         setContentView(R.layout.main);  
  15.         //初始化皮肤  
  16.         mSettingManager = new SkinSettingManager(this);  
  17.         mSettingManager.initSkins();  
  18.     }  
  19.     //这里为了简单实现,实现换肤  
  20.     @Override  
  21.     public boolean onTouchEvent(MotionEvent event) {  
  22.         mSettingManager.toggleSkins();  
  23.         return super.onTouchEvent(event);  
  24.     }  
  25.       
  26. }  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值