安卓换肤功能实现

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
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值