JavaMe 编程连载(8) - 换肤的实现
来源:互联网 发布:网络招标平台有哪些 编辑:程序博客网 时间:2024/05/23 13:31
【问题描述】
kf156(亚日)在多级菜单实现中,实现了换肤的功能。本文借鉴了kf156(亚日)的部分代码,利用JavaMe连载(7)-数据永久存储所提到的rms实现了换肤的处理。
【代码清单】
Color.java
(借鉴了kf156(亚日)的代码,有所改动,感谢署名为kf156(亚日)的网友,他的代码风格确实很好)
package com.token.view.components;/** * 颜色类 * * @author kf156(亚日) * * @Email kf156@QQ.com * * @CopyrightNotice 此代码仅供学习交流,您可以使用并传播本源代码,但请保留作者信息。切勿商用,若有需要,请先于本人联系。 */public class Color {public static int strong = 0xFF8C00;//令牌显示颜色public static int warning1 = 0xFF4500;// 警告颜色public static int warning2 = 0xFF0000;// 警告颜色public static int error = 0xFF0000;// 错误颜色public static int background = 0xF0FAE6;// 背景颜色public static int menuFrame = 0xB8E58A;// 窗体框架颜色public static int label = 0xF0F8FF;// 标题颜色public static int text = 0x314F12;// 正文颜色public static int selectText = 0xFFFFFF;// 被选择后的正文颜色public static int selectBg = 0x548720;// 被选择后的背景颜色public static int cmdBarTop = 0x9FDB63;// 命令栏上半部分颜色public static int cmdBarBottom = 0x81D130;// 命令栏下半部分颜色public static int menuBg = 0xE0F5CB;// 命令菜单主背景色public static int cmdSelectTop = 0x7DAB4F;// 命令菜单选中项上半部分颜色public static int cmdSelectBottom = 0x5B9422;// 命令菜单选中项下半部分颜色public static int linkClick = 0xFF0000;// 超链接点击后的颜色public static int frame = 0x458B00;//边框颜色public static int frameBg = 0x556B2F;//边框背景颜色public static final int GREY = 0xBBBBBB;// 灰边框public static final int BLACK = 0x0;// 黑色public static final int WHITE = 0xFFFFFF;// 白色public static final int TRANSLUCENCY_WRITE = 0x55FFFFFF;// 白色半透明public static final int TRANSLUCENCY_BLACK = 0x55000000;// 黑色半透明public static final byte STYLE_RED = 0;// 红色public static final byte STYLE_ORANGE = 1;// 橙色public static final byte STYLE_YELLOW = 2;// 黄色public static final byte STYLE_GREEN = 3;// 绿色public static final byte STYLE_LIME = 4;// 酸橙色public static final byte STYLE_CYAN = 5;// 青色public static final byte STYLE_AQUA = 6;// 浅绿色public static final byte STYLE_SKY_BLUE = 7;// 天蓝色public static final byte STYLE_BLUE = 8;// 蓝色public static final byte STYLE_PURPLE = 9;// 紫色public static final byte STYLE_FUCHSIA = 10;// 紫红色public static final byte STYLE_MAGENTA = 11;// 红紫色public static final byte STYLE_BLACK = 12;// 黑色public static int colorName = STYLE_GREEN;// 风格名称// 红色风格H0(#FF0000)private static void redColor() {background = 0xFAE7E7;// 背景颜色label = 0xFAEBD7;// 标题颜色text = 0x4F1212;// 正文颜色// selectTextColor = 0xFFFFFF;// 被选择后的正文颜色menuFrame = 0xE58A8A;// 窗体框架颜色menuBg = 0xF5CBCB;// 命令菜单主背景色selectBg = 0x872020;// 被选择后的背景颜色cmdBarTop = 0xDB6363;// 命令栏上半部分颜色cmdBarBottom = 0xD13030;// 命令栏下半部分颜色cmdSelectTop = 0xAB4F4F;// 命令菜单选中项上半部分颜色cmdSelectBottom = 0x942222;// 命令菜单选中项下半部分颜色frame = 0xF70909;//边框颜色frameBg = 0xD52B2B;//边框背景颜色}// 橙色风格H30(#FF7F00)private static void orangeColor() {background = 0xFAF0E6;// 背景颜色label = 0xFFE4B5;// 标题颜色text = 0x4F3112;// 正文颜色// selectTextColor = 0xFFFFFF;// 被选择后的正文颜色menuFrame = 0xE5B88A;// 窗体框架颜色menuBg = 0xF5E0CB;// 命令菜单主背景色selectBg = 0x875420;// 被选择后的背景颜色cmdBarTop = 0xDB9F63;// 命令栏上半部分颜色cmdBarBottom = 0xD18130;// 命令栏下半部分颜色cmdSelectTop = 0xAB7D4F;// 命令菜单选中项上半部分颜色cmdSelectBottom = 0x945B22;// 命令菜单选中项下半部分颜色frame = 0xF76809;//边框颜色frameBg = 0xD56F2B;//边框背景颜色}// 黄色风格H60(#FFFF00)private static void yellowColor() {background = 0xFAFAE6;// 背景颜色label = 0xFFFACD;// 标题颜色text = 0x4F4F12;// 正文颜色// selectText = 0xFFFF00;// 被选择后的正文颜色menuFrame = 0xE5E58A;// 窗体框架颜色menuBg = 0xF5F5CB;// 命令菜单主背景色selectBg = 0x878720;// 被选择后的背景颜色cmdBarTop = 0xDBDB63;// 命令栏上半部分颜色cmdBarBottom = 0xD1D130;// 命令栏下半部分颜色cmdSelectTop = 0xABAB4F;// 命令菜单选中项上半部分颜色cmdSelectBottom = 0x949422;// 命令菜单选中项下半部分颜色frame = 0xF7C709;//边框颜色frameBg = 0xD5D52B;//边框背景颜色}// 绿色风格H90(#80FF00)private static void greenColor() {background = 0xF0FAE6;// 背景颜色label = 0xF0F8FF;// 标题颜色text = 0x314F12;// 正文颜色// selectTextColor = 0xFFFFFF;// 被选择后的正文颜色menuFrame = 0xB8E58A;// 窗体框架颜色menuBg = 0xE0F5CB;// 命令菜单主背景色selectBg = 0x548720;// 被选择后的背景颜色cmdBarTop = 0x9FDB63;// 命令栏上半部分颜色cmdBarBottom = 0x81D130;// 命令栏下半部分颜色cmdSelectTop = 0x7DAB4F;// 命令菜单选中项上半部分颜色cmdSelectBottom = 0x5B9422;// 命令菜单选中项下半部分颜色frame = 0x458B00;//边框颜色frameBg = 0x556B2F;//边框背景颜色}// 酸橙色风格H120(0x00FF00)private static void limeColor() {background = 0xE6FAE6;// 背景颜色label = 0xEEE9BF;// 标题颜色text = 0x124F12;// 正文颜色// selectTextColor = 0xFFFFFF;// 被选择后的正文颜色menuFrame = 0x8AE58A;// 窗体框架颜色menuBg = 0xCBF5CB;// 命令菜单主背景色selectBg = 0x208720;// 被选择后的背景颜色cmdBarTop = 0x63DB63;// 命令栏上半部分颜色cmdBarBottom = 0x30D130;// 命令栏下半部分颜色cmdSelectTop = 0x4FAB4F;// 命令菜单选中项上半部分颜色cmdSelectBottom = 0x229422;// 命令菜单选中项下半部分颜色frame = 0x09F738;//边框颜色frameBg = 0x2BD54D;//边框背景颜色}// 青色风格H150(0x00FF80)private static void cyanColor() {background = 0xE6FAF0;// 背景颜色label = 0xE0FFFF;// 标题颜色text = 0x124F31;// 正文颜色// selectTextColor = 0xFFFFFF;// 被选择后的正文颜色menuFrame = 0x8AE5B8;// 窗体框架颜色menuBg = 0xCBF5E0;// 命令菜单主背景色selectBg = 0x208754;// 被选择后的背景颜色cmdBarTop = 0x63DB9F;// 命令栏上半部分颜色cmdBarBottom = 0x30D181;// 命令栏下半部分颜色cmdSelectTop = 0x4FAB7D;// 命令菜单选中项上半部分颜色cmdSelectBottom = 0x22945B;// 命令菜单选中项下半部分颜色frame = 0x4DB34D;//边框颜色frameBg = 0x8AB34D;//边框背景颜色}// 浅绿色风格H180(#00FFFF)private static void aquaColor() {background = 0xE6FAFA;// 背景颜色label = 0xE0EEE0;// 标题颜色text = 0x445500;// 正文颜色// selectTextColor = 0xFFFFFF;// 被选择后的正文颜色menuFrame = 0x88AA55;// 窗体框架颜色menuBg = 0xE6FAFA;// 命令菜单主背景色selectBg = 0xAECC33;// 被选择后的背景颜色cmdBarTop = 0xBDE61A;// 命令栏上半部分颜色cmdBarBottom = 0xB8DD22;// 命令栏下半部分颜色cmdSelectTop = 0xB8DD22;// 命令菜单选中项上半部分颜色cmdSelectBottom = 0xB3D52B;// 命令菜单选中项下半部分颜色frame = 0x8E8E38;//边框颜色frameBg = 0x8B8B00;//边框背景颜色}// 天蓝色风格H210(#0080FF)private static void skyBlueColor() {background = 0xE6F0FA;// 背景颜色label = 0xE0FFFF;// 标题颜色text = 0x12314F;// 正文颜色// selectTextColor = 0xFFFFFF;// 被选择后的正文颜色menuFrame = 0x8AB8E5;// 窗体框架颜色menuBg = 0xCBE0F5;// 命令菜单主背景色selectBg = 0x205487;// 被选择后的背景颜色cmdBarTop = 0x639FDB;// 命令栏上半部分颜色cmdBarBottom = 0x3081D1;// 命令栏下半部分颜色cmdSelectTop = 0x4F7DAB;// 命令菜单选中项上半部分颜色cmdSelectBottom = 0x225B94;// 命令菜单选中项下半部分颜色frame = 0x0997F7;//边框颜色frameBg = 0x2BB3D5;//边框背景颜色}// 深蓝色风格H240(#0000FF)private static void blueColor() {background = 0xE6E6FA;// 背景颜色label = 0xE0EEEE;// 标题颜色text = 0x12124F;// 正文颜色// selectTextColor = 0xFFFFFF;// 被选择后的正文颜色menuFrame = 0x8A8AE5;// 窗体框架颜色menuBg = 0xCBCBF5;// 命令菜单主背景色selectBg = 0x202087;// 被选择后的背景颜色cmdBarTop = 0x6363DB;// 命令栏上半部分颜色cmdBarBottom = 0x3030D1;// 命令栏下半部分颜色cmdSelectTop = 0x4F4FAB;// 命令菜单选中项上半部分颜色cmdSelectBottom = 0x222294;// 命令菜单选中项下半部分颜色frame = 0x0909F7;//边框颜色frameBg = 0x2B2BD5;//边框背景颜色}// 紫色风格H270(#8000FF)private static void purpleColor() {background = 0xF0E6FA;// 背景颜色label = 0xFDF5E6;// 标题颜色text = 0x31124F;// 正文颜色// selectTextColor = 0xFFFFFF;// 被选择后的正文颜色menuFrame = 0xB88AE5;// 窗体框架颜色menuBg = 0xE0CBF5;// 命令菜单主背景色selectBg = 0x542087;// 被选择后的背景颜色cmdBarTop = 0x9F63DB;// 命令栏上半部分颜色cmdBarBottom = 0x8130D1;// 命令栏下半部分颜色cmdSelectTop = 0x7D4FAB;// 命令菜单选中项上半部分颜色cmdSelectBottom = 0x5B2294;// 命令菜单选中项下半部分颜色frame = 0x6809F7;//边框颜色frameBg = 0x6F2BD5;//边框背景颜色}// 紫红色风格H300(#FF00FF)private static void fuchsiaColor() {background = 0xFAE6FA;// 背景颜色label = 0xFAF0E6;// 标题颜色text = 0x4F124F;// 正文颜色// selectTextColor = 0xFFFFFF;// 被选择后的正文颜色menuFrame = 0xE58AE5;// 窗体框架颜色menuBg = 0xF5CBF5;// 命令菜单主背景色selectBg = 0x872087;// 被选择后的背景颜色cmdBarTop = 0xDB63DB;// 命令栏上半部分颜色cmdBarBottom = 0xD130D1;// 命令栏下半部分颜色cmdSelectTop = 0xAB4FAB;// 命令菜单选中项上半部分颜色cmdSelectBottom = 0x942294;// 命令菜单选中项下半部分颜色frame = 0x9709F7;//边框颜色frameBg = 0xB32BD5;//边框背景颜色}// 红紫色风格H330(#FF007F)private static void magentaColor() {background = 0xFAE6F0;// 背景颜色label = 0xFFEFD5;// 标题颜色text = 0x4F1231;// 正文颜色// selectTextColor = 0xFFFFFF;// 被选择后的正文颜色menuFrame = 0xE58AB8;// 窗体框架颜色menuBg = 0xF5CBE0;// 命令菜单主背景色selectBg = 0x872054;// 被选择后的背景颜色cmdBarTop = 0xDB639F;// 命令栏上半部分颜色cmdBarBottom = 0xD13081;// 命令栏下半部分颜色cmdSelectTop = 0xAB4F7D;// 命令菜单选中项上半部分颜色cmdSelectBottom = 0x94225B;// 命令菜单选中项下半部分颜色frame = 0xC709F7;//边框颜色frameBg = 0xD52BD5;//边框背景颜色}//黑色风格(#000000)private static void blackColor() {background = 0xEDEDED;// 背景颜色label = 0xEAEAEA;// 标题颜色text = 0x030303;// 正文颜色// selectTextColor = 0xFFFFFF;// 被选择后的正文颜色menuFrame = 0x2E2E2E;// 窗体框架颜色menuBg = 0xC9C9C9;// 命令菜单主背景色selectBg = 0x4A4A4A;// 被选择后的背景颜色cmdBarTop = 0x3B3B3B;// 命令栏上半部分颜色cmdBarBottom = 0x383838;// 命令栏下半部分颜色cmdSelectTop = 0x2E2E2E;// 命令菜单选中项上半部分颜色cmdSelectBottom = 0x0D0D0D;// 命令菜单选中项下半部分颜色frame = 0x0A0A0A;//边框颜色frameBg = 0x636363;//边框背景颜色}// 风格切换public static void nextColor() {set(++colorName);}/** * 设置颜色 * */public static void set(int color) {// System.out.println(color);switch (color) {case STYLE_RED:// 红色redColor();break;case STYLE_ORANGE:// 橙色orangeColor();break;case STYLE_YELLOW:// 黄色yellowColor();break;case STYLE_GREEN:// 绿色greenColor();break;case STYLE_LIME:// 酸橙色limeColor();break;case STYLE_CYAN:// 青色cyanColor();break;case STYLE_AQUA:// 浅绿色aquaColor();break;case STYLE_SKY_BLUE:// 天蓝色skyBlueColor();break;case STYLE_BLUE:// 蓝色blueColor();break;case STYLE_PURPLE:// 紫色purpleColor();break;case STYLE_FUCHSIA:// 紫红色fuchsiaColor();break;case STYLE_MAGENTA:// 红紫色magentaColor();break;case STYLE_BLACK:// 红紫色blackColor();break;default:// 颜色循环完毕,返回红色colorName = STYLE_RED;redColor();// REDbreak;}}// 设置新风格public static void setNewColor(int newColor) {background = newColor;menuFrame = background - 0x3A155D;label = background - 0x25A8E5;text = background - 0xC0ACD5;selectText = background + 0x100518;selectBg = background - 0x9D72C7;cmdBarTop = background - 0x531E84;cmdBarBottom = background - 0x742AB8;}}
ConfigureDataItem.java
package com.token.model;//import com.token.util.StringDealMethod;public class ConfigureDataItem {private int id; public String color = null; public ConfigureDataItem(String color){ this.color = color; } public ConfigureDataItem(int id,byte[] data){ this.id=id; //String temp=new String(data); //String temp_sub[] = StringDealMethod.split(temp, ","); this.color = new String(data); } public int getId(){ return id; } public void setId(int id){ this.id=id; } public String getColor(){ return color; } public void setData(String color){ this.color = color; } public byte[] getBytes(){ String temp=null; if(color==null){ return null; }else{ temp=color; } return temp.getBytes(); }}
ConfigureDataRecord.java
package com.token.util;import java.util.Vector;import javax.microedition.rms.RecordComparator;import javax.microedition.rms.RecordEnumeration;import javax.microedition.rms.RecordStore;import javax.microedition.rms.RecordStoreException;import com.token.model.ConfigureDataItem;public class ConfigureDataRecord {private static final String RECORDSTORE_NAME="CONFIG_DB";private static RecordStore info;public ConfigureDataRecord(){}//打开RecordStore,没有则创建 public void openDataBase() { try { info = RecordStore.openRecordStore(RECORDSTORE_NAME, true); }catch (RecordStoreException ex) { info =null; } } //关闭RecordStore public void closeDataBase() { if (info!= null) { try { info.closeRecordStore(); info=null; } catch (RecordStoreException ex) {} } } //增加记录 public int db_addRecord(ConfigureDataItem item) { try { this.openDataBase(); byte[] data=item.getBytes(); int id=info.getNextRecordID(); info.addRecord(data,0,data.length); this.closeDataBase(); return id; } catch (RecordStoreException ex) { } return -1; } //更新记录 public void db_updateRecord(ConfigureDataItem item){ try { this.openDataBase(); byte[] data=item.getBytes(); info.setRecord(item.getId(),data,0,data.length); this.closeDataBase(); } catch (RecordStoreException ex) { } } //访问一条记录 public ConfigureDataItem db_getRecord(int id){ ConfigureDataItem item=null; try { this.openDataBase(); item = new ConfigureDataItem(id,info.getRecord(id)); this.closeDataBase(); } catch (RecordStoreException ex) { } return item; } //删除一条记录 public void db_deleteRecord(int id){ try { this.openDataBase(); info.deleteRecord(id); this.closeDataBase(); } catch (RecordStoreException ex) {} } //删除所有记录 public void db_deleteAllRecord(){ try { RecordStore.deleteRecordStore(RECORDSTORE_NAME); } catch (RecordStoreException ex) {} } //访问所有记录 public Vector db_getRecords(){ Vector items=new Vector(10,3); this.openDataBase();//打开RecordStore RecordEnumeration enum1=null; int ind=0; try{ ConfigureDataItem item=null; enum1=info.enumerateRecords(null,new InnerComparator(),false); while(enum1.hasPreviousElement()){ ind=enum1.previousRecordId(); item=new ConfigureDataItem(ind,info.getRecord(ind)); items.addElement(item); } }catch(Exception ex){ex.printStackTrace();} finally{ try{ enum1.destroy(); }catch(Exception e){} this.closeDataBase();//关闭RecordStore }//end finally return items; } //一个简单的比较器 private class InnerComparator implements RecordComparator{ public int compare(byte[] rec1, byte[] rec2){ if(rec1.length>rec2.length) return FOLLOWS; else if(rec1.length<rec2.length) return PRECEDES; else return EQUIVALENT; } }}
Configure.java
package com.token.util;import com.token.model.ConfigureDataItem;import com.token.view.components.Color;public class Configure {private static ConfigureDataRecord confRecord = new ConfigureDataRecord();public Configure(){}public static void configureColor(){int id = 1;if(confRecord.db_getRecord(1)==null){ConfigureDataItem confItem = new ConfigureDataItem(1,"3".getBytes());id=confRecord.db_addRecord(confItem);}ConfigureDataItem confItem1 = confRecord.db_getRecord(id);Color.set(Integer.valueOf(confItem1.getColor()).intValue());}}
【分析】
1 在启动时,调用
Configure.configureColor();
对颜色进行配置。
2 换肤的实现
在按键事件keyPressed()中,对按键进行判断。
(1) 设置颜色,调用
Color.set(color);
(2) 更新颜色配置记录
ConfigureDataItem confItem = new ConfigureDataItem(1,String.valueOf(color).getBytes());confRecord.db_updateRecord(confItem);
(3) 刷新画面
String flag = "0";Object [] args = {flag,""};controller.handleEvent(UIController.EventID.EVENT_MAIN_SCREEN, args);
【代码清单】
protected void keyPressed(int keyCode) {... switch(currentlySelectedIndex) {... case 4: { color = Integer.valueOf(confRecord.db_getRecord(1).color).intValue(); if(color<12) { color++; } else { color = 0; } Color.set(color); ConfigureDataItem confItem = new ConfigureDataItem(1,String.valueOf(color).getBytes()); confRecord.db_updateRecord(confItem); String flag = "0"; Object [] args = {flag,""}; controller.handleEvent(UIController.EventID.EVENT_MAIN_SCREEN, args); break; }}....}
换肤后,将永久生效。实现效果,如图1、2所示:
图1 换肤前
图2 换肤后
转载请标明出处,仅供学习交流,勿用于商业目的
Copyright @ http://blog.csdn.net/tandesir
- JavaMe 编程连载(8) - 换肤的实现
- JavaMe 编程连载(5) - 绘制文本框TextEdit
- JavaMe 编程连载(6) - 自适应滚动显示
- JavaMe 编程连载(7) - 数据永久存储
- JavaMe 编程连载(1) - 低级界面绘图之点阵字
- JavaMe 编程连载(2) - 低级界面绘图之菜单
- [荐]JavaMe 编程连载(3) - 也说MVC设计模式
- JavaMe 编程连载(4) - 绘制可自动换行文本
- JavaMe 编程连载(9) - 重构之数据永久存储
- 换肤功能的实现
- 记录:JavaME编程中发现的两个不尽人意的地方
- Linux C编程连载(1)-cp的实现
- Linux C编程连载【1】-cp的实现
- Extjs 下的换肤功能实现。
- 框架页面的换肤实现
- 实现换肤功能的思路
- 用jquery实现换肤的效果
- android 换肤功能的实现
- NAT主流穿越技术
- (c#)SKYPE API项目总结(二)
- s3c2410_gpio_cfgpin函数解析
- Java中HashMap结构自身占用的内存和Runtime类的freeMemory()等几个方法
- 在tomcat服务器端解决中文乱码问题
- JavaMe 编程连载(8) - 换肤的实现
- myeclipse編碼困擾
- hadoop面试小结
- 快排、寻找第k小数和前k小数
- MySQL 性能优化 经验
- Linux下s3c6410的GPIO操作(2)
- 经典R-K
- 有消息说 詹姆斯-韦伯 “时刻生活在地球的阴影中”
- 写网络视频监视器中的总结(二)