JavaMe 编程连载(8) - 换肤的实现

【问题描述】

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();// RED
			break;
		}
	}

	// 设置新风格
	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

 

 

 

 

 

 


 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值