Android美女一键换肤
今天看到有同事在群里聊到仿QQQ 皮肤切换主题,然后我就试着写一个简单的Demo希望大家能够支持下!
像以前扣扣换肤
废话不多说上效果
思路如下
通过应用程序内置资源实现换肤,典型的应用为QQ空间中换肤的实现. 应用场景为: 应用一般不大,且页面较少,风格相对简单,一般只用实现部分资源或者只用实现背景的更换.
此种换肤方式实现的思路:
1. 把几套皮肤放在res/drawable目录里,然后用SharedPreferences来记录当前皮肤的资源id.然后在程序启动时加载Activity背景。
2. 主要的实现在皮肤管理器SkinSettingManager类中. 将皮肤资源的ID加入集合中. 由该类同一调度皮肤更换,如初始化皮肤,获取当前皮肤符号以及具体的对应资源的更换皮肤.
SkinSettingManager
package com.zm.util;
import com.zm.recordtest.R;
import android.app.Activity;
import android.content.SharedPreferences;
public class SkinSettingManager {
public final static String SKIN_PREF="skinSetting";
private SharedPreferences sp;
private int[] skinResources={
R.drawable.gril,R.drawable.grl2,R.drawable.grl3,R.drawable.grl4,
R.drawable.grl5
};
private Activity mActivity;
public SkinSettingManager(Activity activity){
this.mActivity=activity;
sp=mActivity.getSharedPreferences(SKIN_PREF, 3);
}
public int SkinType(){
String key="skin_type";
return sp.getInt(key, 0);
}
public void setSkinType(int j){
SharedPreferences.Editor editor=sp.edit();
String key="skin_type";
editor.putInt(key, j);
editor.commit();
}
/**
* 获取当前皮肤背景图片资源
*
*/
public int getCurrentSkinRes(){
int skinLen=skinResources.length;
int getSkinlen=SkinType();
//如果刚好等于从第一张开始
if(getSkinlen>=skinLen){
getSkinlen=0;
}
return skinResources[getSkinlen];
}
public void toggleSkins(){
int skinType=SkinType();
if(skinType==skinResources.length-1){
skinType=0;
}else{
skinType++;
}
setSkinType(skinType);
mActivity.getWindow().setBackgroundDrawable(null);
try {
mActivity.getWindow().setBackgroundDrawableResource(getCurrentSkinRes());
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 用于皮肤的初始化
*/
public void initSkins(){
mActivity.getWindow().setBackgroundDrawableResource(getCurrentSkinRes());
}
/**
* 切换换肤
*/
public void changeSkin(int id){
setSkinType(id);
mActivity.getWindow().setBackgroundDrawable(null);
try {
mActivity.getWindow().setBackgroundDrawableResource(getCurrentSkinRes());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
然后主SkinActivty
package com.zm.recordtest;
import com.zm.util.LogUtil;
import com.zm.util.SkinSettingManager;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.Window;
import android.view.WindowManager;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
public class SkinActivity extends Activity {
private RadioGroup rg;
private RadioButton rd1,rd2,rd3,rd4,rd5;
private SkinSettingManager manager;
@Override
protected void onCreate(Bundle savedInstanceState) {
//隐藏标题
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
//全屏显示
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_skin);
manager=new SkinSettingManager(this);
//初始化主题
manager.initSkins();
initView();
}
private void initView() {
//初始化
rg=(RadioGroup) findViewById(R.id.skin_options);
rd1=(RadioButton) findViewById(R.id.rd1);
rd2=(RadioButton) findViewById(R.id.rd2);
rd3=(RadioButton) findViewById(R.id.rd3);
rd4=(RadioButton) findViewById(R.id.rd4);
rd5=(RadioButton) findViewById(R.id.rd5);
rg.setOnCheckedChangeListener(new OnCheckedChangeListener() {
//设置点击事件
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
// 点击raidobutton切换不同主题皮肤
switch (checkedId) {
case R.id.rd1:
manager.changeSkin(1);
//LogUtil.i("换皮肤", "切换第"+checkedId+"皮肤");
break;
case R.id.rd2:
manager.changeSkin(2);
//LogUtil.i("换皮肤", "切换第"+checkedId+"皮肤");
break;
case R.id.rd3:
manager.changeSkin(3);
//LogUtil.i("换皮肤", "切换第"+checkedId+"皮肤");
break;
case R.id.rd4:
manager.changeSkin(4);
//LogUtil.i("换皮肤", "切换第"+checkedId+"皮肤");
break;
case R.id.rd5:
manager.changeSkin(5);
//LogUtil.i("换皮肤", "切换第"+checkedId+"皮肤");
break;
default:
break;
}
}
});
}
// 实现换肤
public boolean onTouchEvent(MotionEvent event) {
manager.toggleSkins();
return super.onTouchEvent(event);
}
}
Android美女一键换肤相关推荐
- opengl源码 实现无缝切换图片过场_手把手讲解 Android hook技术实现一键换肤
前言 产品大佬又提需求啦,要求app里面的图表要实现白天黑夜模式的切换,以满足不同光线下都能保证足够的图表清晰度. 怎么办?可能解决的办法很多,你可以给图表view增加一个toggle方法,参数Str ...
- Android一键换肤原理简述
简介 Android对应用进行换肤操作,首先要生成一个对应的皮肤包,在要换肤的应用中收集需要换肤的控件,获取皮肤包里的资源,一键换肤时遍历View树,对要换肤的控件进行换肤.下面总结为4个步骤 步骤 ...
- android换肤的实现方案,Android应用开发之Android一键换肤功能实现
本文将带你了解Android应用开发之Android一键换肤功能实现,希望本文对大家学Android有所帮助. < 市面上对数的App都提供换肤功能,这里暂且不讲白天和夜间模式 下图是网易云音乐 ...
- Android hook技术实现一键换肤,移动应用开发项目案例
3. 利用HOOK技术实现优雅的"一键换肤" 什么是hook **如题,我是用hook实现一键换肤.那么什么是hook? hook,钩子. 安卓中的hook技术,其实是一个抽象概念 ...
- 三步实现Android应用内一键换肤,无需重启应用,无需编写多余代码
古人学问无遗力,少壮工夫老始成. 纸上得来终觉浅,绝知此事要躬行. --<冬夜读书示子聿> · 陆游 换肤效果演示 四种皮肤切换:默认白色.蓝色.绿色和玫瑰红: 前言 先给大家介绍一下现在 ...
- android换肤的实现方案,一种基于Android平台的一键换肤方法与流程
本发明属于互联网技术领域,尤其涉及一种基于Android平台的一键换肤方法. 背景技术: 换肤性能的添加在很大的程度上面提高了用户的体验感,用户可以根据自己喜好选择自己喜欢的皮肤颜色,并且我们针对不同 ...
- Android通过Hook技术实现一键换肤
目录 1.什么是一键换肤 2.界面上那些东西可以换肤 3.利用Hook实现一键换肤 4.Android创建视图源码分析 4.1.自定义Activity设置要显示的布局文件xml 4.2.调用兼容App ...
- wegame一键蹲替换文件_手把手讲解 Android hook技术实现一键换肤
前言 产品大佬又提需求啦,要求app里面的图表要实现白天黑夜模式的切换,以满足不同光线下都能保证足够的图表清晰度. 怎么办?可能解决的办法很多,你可以给图表view增加一个toggle方法,参数Str ...
- Android插件化的思考——仿QQ一键换肤,思考比实现更重要!
Android插件化的思考--仿QQ一键换肤,思考比实现更重要! 今天群友希望写一个关于插件的Blog,思来想去,插件也不是很懂,只是用大致的思路看看能不能模拟一个,思路还是比较重要的,如果你有兴趣的 ...
最新文章
- extjs4.0视频教程下载
- 开学很忙,故障很强(1)!!
- Wince6.0应用开发:一、平台搭建
- 面试中被问到HashMap的结构,1.7和1.8有哪些区别?这篇做深入分析!
- 保持代码工整的 7 个小技巧
- Unity3d动画脚本 Animation Scripting(深入了解游戏引擎中的动画处理原理)
- Cisdem DVD Burner for Mac(DVD光盘刻录软件)
- js中获取中文相应gbk编码
- ADAS/AD控制器模块开发03 - 系统架构设计及通用需求定义
- web - 前端特效和博客
- 多版本谷歌chrome浏览器并存(谷歌浏览器从C盘移植)
- RK3288 资源汇总
- windows10安装keras教程
- 2022年Web 前端怎样入门?最新Web前端入门的学习路线
- 乐鑫ESP32 NVS读错误BUG:nvs_get_blob
- 桥 Gym100712H Bridges
- weinre调试环境搭建
- gem5下用se模式运行自己的测试程序
- 解决WIN10隔几分钟就自动黑屏睡眠的方法!
- 关于参加大数据培训机构有没有用的一些想法
热门文章
- 01_MIPS架构初探
- 国密SM9算法C++实现之五:签名验签算法
- 戴尔计算机的硬件配置情况,戴尔g3怎么查电脑配置
- maven 使用tomcat插件启动报错 A child container failed during start
- VC++武汉科技大学机械自动化学院
- 制作PPT模板图片排版的创意设计技巧有哪些?
- 云南大学软件学院java实验九_云南大学软件学院Java实验二
- 视频教程-C#Winform窗体与界面设计-C#
- 最近自己做的企业应用(思维导图、战略地图、表单设计器、商业智能、平衡计分卡)
- 正版office2007标准版