您的位置:首页 > 移动开发 > Android开发

Apad Qzone项目总结(二)---换肤功能实现!!!

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



图1:默认的皮肤.



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

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

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

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

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



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

[java] view
plaincopy

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调用,代码如下:

[java] view
plaincopy

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);  

    }  

      

}  

以上三步就大功告成啦!,哈哈,很容易吧,今天就讲到这里,提前祝大家元旦快乐!!!

源代码点击进入==>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 换肤