今天一大早,心情不错,就打算将牌视图的实现简单说一下。
首先,我们先看下素材是如何的,如下图所示:
素材一开始是本人经过ps设计出来,然后再切成一个个小件,通过一个叫做TexturePackerGUI的软件生成的一张整合图片,配带着一个说明各小图片位置大小的文本文件,文本文件内容格式如下:
10_b.png:29:370:25:30
10_b.png为图片名称,29:370分别是为代表位置的x,y,25:30为图片宽高大小。
为此我写了一个解析这两个文件的工具类,代码如下:
/** *Title: AssetManager.java
*Description: 素材管理,实现了单例
*Copyright: Copyright (c) 2007
* @author Tunie * @date 2014年9月18日 * @version 1.0 */public class AssertManager { private Listimages; private Map asserts; private AssertManager() { images = new ArrayList (); asserts = new HashMap (); } /** * 读取文件 * @param imagePath 图片文件路径 * @param imageDescPath 图片描述文件路径 */ public void readFile(String imagePath , String imageDescPath) { BufferedImage image = null; try { URL url = AssertManager.class.getClassLoader().getResource( imagePath); image = ImageIO.read(url); } catch (IOException e) { e.printStackTrace(); System.out.println("读取图片出错"); return; } images.add(image); try { String encoding = "GBK"; URL url = AssertManager.class.getClassLoader().getResource( imageDescPath); File file = new File(url.getPath()); Asset asset = null; if (file.isFile() && file.exists()) { // 判断文件是否存在 InputStreamReader read = new InputStreamReader( new FileInputStream(file), encoding);// 考虑到编码格式 BufferedReader bufferedReader = new BufferedReader(read); String lineTxt = null; while ((lineTxt = bufferedReader.readLine()) != null) { System.out.println(lineTxt); asset = new Asset(lineTxt, image); asserts.put(asset.getName(), asset); } read.close(); } else { System.out.println("找不到指定的文件"); } } catch (Exception e) { System.out.println("读取文件内容出错"); e.printStackTrace(); } } public void clear() { asserts.clear(); images.clear(); } public BufferedImage getImage(String name) { Asset asset = asserts.get(name); if (asset != null) return asset.getImage(); return null; } public static void loadFile(String imagePath , String imageDescPath) { getInstance().readFile(imagePath, imageDescPath); } public static BufferedImage getAssert(String name) { return getInstance().getImage(name); } private static AssertManager instance; public static synchronized AssertManager getInstance() { if (instance == null) instance = new AssertManager(); return instance; } /** * Title: Asset
*Description:素材,主要为图片
* @author Tunie * @date 2014年9月18日 */ private class Asset { private BufferedImage parentImage; private String name; private int x; private int y; private int width; private int height; public Asset(String descInfo , BufferedImage parentImage) { analyse(descInfo); this.parentImage = parentImage; } public BufferedImage getImage() { return parentImage.getSubimage(x, y, width, height); } private void analyse(String descInfo) { String[] descs = descInfo.split(":"); name = descs[0]; x = new Integer(descs[1]); y = new Integer(descs[2]); width = new Integer(descs[3]); height = new Integer(descs[4]); } public String getName() { return name; } }}
实现很简单,没什么值得说明的地方。