Android XML資源を十分に利用する---配列資源

2991 ワード

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.creat Bitmap(bmp、ox、oy、mw、mh)を採用しています.つまり、デッドマップの位置の大きさを書いています.
2.一つのenumを各図に一つのnameを定義し、x、y、w、h情報を付加する(美工改図は面倒)
3.xmlでこの大図のすべての小図を記録します.名前、x、y、w、hを含みます.そして、順序付けて初期化する時、解析xmlはすべての小図x、y、w、hを保存します.
私は第3セットの案を採用しました.成功しました.でも、全部の写真はbitmapを生成して管理しています.
/**
	 *            ID     ,        
	 *    Bodies1    bodies1.png        ID,
	 *        ID    
	 */
	private static List<Integer> resIds;	//      ID
	
	/**
	 *               .
	 *          
	 */
	private static HashMap<Integer, Bitmap> bmpsMap; //
初めて読み込むのですが、画像ごとに一意のIDを使わなければなりません.これはもつれました.アンディロイドを使って自動的に生成されるIDを使うのに慣れました.
その後、エニュメレーションエンムの手動設定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;
		}
	}
が使用するときは、Bodies 1パラメータを伝えます.
数日前に突然Android xmlを思い出しました.配列資源を定義できます.
そこで私はこのようにします.
<!--               :x,y,w,h -->
	<integer-array name="box">
		<item>250</item>
		<item>2</item>
		<item>65</item>
		<item>47</item>
	</integer-array>
	<integer-array name="box_small">
		<item>250</item>
		<item>160</item>
		<item>29</item>
		<item>21</item>
	</integer-array>
その後、このように読み取り、私の問題を完璧に解決しました.
/**
	 *    img_bodies1.png     
	 * @param id       ID:x,y,w,h
	 * @return
	 */
	public static Bitmap getBodies1Bitmap(int id) {
		Bitmap bmp = getBitmap(id);
		
		if(bmp == null){
			int[] a = res.getIntArray(id);
			bmp = Bitmap.createBitmap(getBitmap(R.drawable.img_bodies1), a[0], a[1], a[2], a[3]);
			put(id, bmp);
		}
		
		return bmp;
	}