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);
}
}
以上三步就大功告成啦!,哈哈,很容易吧,今天就讲到这里,提前祝大家元旦快乐!!!
源代码点击进入==>
图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);
}
}
以上三步就大功告成啦!,哈哈,很容易吧,今天就讲到这里,提前祝大家元旦快乐!!!
源代码点击进入==>
相关文章推荐
- Apad Qzone项目总结(二)---换肤功能实现!!!
- Apad Qzone项目总结(二)---换肤功能实现!!!
- Apad Qzone项目总结(二)---换肤功能实现!!!
- Apad Qzone项目总结(二)---换肤功能实现!!!
- HuaXinIM聊项目阶段总结五(聊天功能实现)
- android实现换肤功能的方法总结
- 小白马卫士项目总结之防盗功能的实现
- HuaXinIM聊项目阶段总结三(登录注册功能实现)
- 利用CSS预处理技术实现项目换肤功能(less css + asp.net mvc4.0 bundle)
- Apad Qzone项目总结(一)---发布!!!
- Apad Qzone项目总结(一)---发布!!!
- OA项目 分页功能总结二 实现较为复杂的分页功能(资料来源于传智播客汤阳光的视频教程)
- (基本功能全部实现)HuaXinIM聊项目阶段总结八(表情发送与远程监控的实现)
- 简笔画项目总结: ios绘图机制 & 实现记录笔迹功能
- baler项目总结-Java调用Jenkins Resetful API实现build功能
- 利用CSS预处理技术实现项目换肤功能-(less css+asp.net mvc bundle)
- 编程菜鸟的日记-初学尝试编程-编写函数实现strcpy功能(总结考察点)
- HuaXinIM聊项目阶段总结六(获取历史信息实现)
- 安卓换肤功能实现
- Listview中使用线程实现无限加载更多项目的功能