JavaME UI设计之资源优化技巧

 
通常在做各种手机应用时,为了实现出非常绚丽的UI界面,就会使用很多图片来自定义UI,这样当一个应用做完时,发现应用程序包已经变得很大了,玩家也肯定不喜欢过大的应用软件包,那么我们需要对这些图片进行压缩,当然压缩的方式很多,网上也能找到很多用来压缩png图片的工具,这里我们就不浪费时间来介绍这些压缩工具的使用了。
另外,当应用中使用的图片过多时,管理维护也不方便,最好的解决方案就是能将使用的所有资源打包成一个文件。最后,当应用程序被打包成jar之后,用户能够用过解压缩工具很容易就看到游戏中的图片,这样游戏很快就能被破解,作为开发者,我们肯定不愿看着自己的应用被盗版!本文我们将介绍一种资源打包的方式,可以有效的管理资源,方便维护,并且防止应用被破解。
使用BinCompiler打包资源
BinCompiler工具可以将应用中的资源打包成二进制文件,然后在程序中读取该二进制资源文件并使用,无论有多少图片BinCompiler都能打包成一个单独的二进制文件。下面我们介绍BinCompiler工具的使用方法。
首先,运行“BinCompiler.exe”,指定要打包的资源文件的路径,和输出二进制文件的路径,如下图所示。
点击create按钮,即在我们制定的位置产生一个bin文件,当然在这个bin文件所在目录还会产生一个index.txt文件。我们在程序中读取这些资源时,需要使用这个index.txt。index.txt文件如下所示:
 
FName     Index      Pos Size
A_04.png        0     0     4141
A_03.png        1     4145       3802
A_02.png        2     7951       3813
A_01.png        3     11768      3959
接下来我们可以使用BinReader.java文件中的两个方法来读取这些资源文件了。代码如下:
/*******************************************************************************
 * Reads a file from the BIN file and return data as a byte buffer
 *******************************************************************************/
public byte[] readFile(String binfile, int pos)
{
       byte buffer[];
       int len;
 
       try {
 
              InputStream is = Class.getClass().getResourceAsStream("/" + binfile);
 
              is.skip(pos);
 
              len = (is.read() & 0xFF) << 24;
              len |= (is.read() 0xFF) << 16;
              len |= (is.read() & 0xFF) << 8;
              len |= (is.read() & 0xFF);
 
              buffer = new byte[len];
      
              is.read(buffer, 0, buffer.length);
 
              is.close();
              is = null;
      
              System.gc();
       } catch (Exception e) {
              buffer = null;
              e.printStackTrace();
              System.gc();
              return null;
       }
 
       return buffer;
}
 
/*******************************************************************************
 * Reads a file from the BIN file and return data as an Image
 *******************************************************************************/
public Image readImage(String binfile, long pos)
{
       byte buffer[];
       long len;
 
       try {
              InputStream is = Class.getClass().getResourceAsStream("/" + binfile);
             
              is.skip(pos);
             
              len = (is.read() & 0xFF) << 24;
              len |= (is.read() & 0xFF) << 16;
              len |= (is.read() & 0xFF) << 8;
              len |= (is.read() & 0xFF);
 
              buffer = new byte[len];
      
              is.read(buffer, 0, buffer.length);
 
              is.close();
              is = null;
      
              System.gc();
       } catch (Exception e) {
              buffer = null;
              e.printStackTrace();
              System.gc();
              return null;
       }
 
       return Image.createImage(buffer, 0, buffer.length);
}
可以看出,这两个方法都只需要传入bin文件名和图片对应的pos,pos值就在我们上面所说的index.txt文件中去找对应的就可以了。
例如我们读取一个图片
Image image = readimage("images.bin", 0);
可以看出,我们传入的pos的值是0,对应index.txt中就应该是A_04.png。
通过BinCompiler工具将资源进行打包,应用程序包中就只包含了一个被BinCompiler打包出来的bin文件,在也看不到图片文件了,可以有效的防止图片被破解和盗用。另外,BinCompiler工具不仅可以打包图片资源,音乐,音效都可以被打包,用同样的方式读取即可在程序中使用。
关于JavaME中UI设计的部分就介绍到这里,希望能够对大家的开发有一定的帮助。最后需要说明一下,现在有很多第三方的开源UI库(比如:LWUIT、J2MEPolish等),利用这些UI库可以更加简单的做出更漂亮的UI界面,弥补了JavaME中UI api的缺点和不足!


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值