1.Integer數組在程序中的使用,
- <!-- 每一張小圖片的信息數組依次為:x,y,w,h -->
- <integer-array name="box">
- <item>250</item>
- <item>2</item>
- <item>65</item>
- <item>47</item>
- </integer-array>
使用數組資源的背景:
最近在做一款游戲,游戲的許多小圖片都在一張大圖上,要使用它們需要知道每張小圖在大圖上的:x,y,w,h
於是我就糾結了:要是一張一張的圖片我可以使用 R.drawable.圖片ID ,這回是好多圖片在一個大圖上,我該怎麼使用呢?想了三種方案
1.在程序每個地方都采用Bitmap.createBitmap(bmp, ox, oy, mw, mh); 即寫死小圖位置大小(顯然不可取)
2.定義一個enum為每張小圖定義一個name,然後附加x,y,w,h信息(美工改圖麻煩)
3.采用xml記錄這張大圖上的所有小圖包括名稱、x,y,w,h,然後有序初始化的時候解析xml保存所有小圖x,y,w,h(算是還可以)
我采取了第三套方案,也成功的實現了,但是總感覺變捏,因為我的所有圖片都是生成bitmap統一管理的,
- /**
- * 每一個已初始化的位圖的ID都是唯一的,包括大圖上的小圖
- * 比如 Bodies1 定義了bodies1.png 上所有的小圖的ID,
- * 必須保證所有的ID不會重合
- */
- private static List<Integer> resIds; //記錄所有資源ID
-
- /**
- * 記錄所有已初始化的位圖的集合.
- * 包括 大圖上的小圖
- */
- private static HashMap<Integer, Bitmap> bmpsMap; //
第一次加載,每張圖片都必須使用一個唯一的ID,這個我就糾結了,習慣了使用Android自動生成的ID
後來我使用了枚舉enum手動設定ID
- /**
- * Bodies1 上圖片ID對應枚舉
- * @author JianbinZhu
- *
- */
- public static enum Bodies1{
- /**
- * 投鄭物系列
- */
- //木箱
- box("box", 0xf0000001), box_small("box_small", 0xf0000002),
- //木桶
- wood("wood", 0xf0000003), wood_small("wood_small", 0xf0000004),
- //木三角
- triangle("triangle", 0xf0000005), triangle_small("triangle_small", 0xf0000006),
- //鐵桶
- metal("metal", 0xf0000007), metal_small("metal_small", 0xf0000008),
- //輪子
- wheel("wheel", 0xf0000009), wheel_small("wheel_small", 0xf000000a),
-
- private final String name; //圖片名
- private final int id; //給的ID
-
- private Bodies1(String name, int id) {
- this.name = name;
- this.id = id;
- }
-
- public int getId() {
- return id;
- }
-
- public String getName() {
- return name;
- }
- }
使用的時候傳Bodies1參數,