2011年12月23日金曜日

ImageView の配列を作る

ImageView を二次元配列で保持する。

例:5*5の場合。XML でlayout 作成。

ImageView[][]imageView; //(1)

imageView=new ImageView[5][5];

for(int i=0;i<5;i++){
        for(int j=0;j<5;j++){
                  imageView[i][j]=new ImageView(this); //(2)
        }
}

imageView[0][0]=(ImageView)findViewById(R.id.imageview1); //(3)


(1) 変数imageViewで二次元配列を宣言。

(2) 引数で this が必要。引数にContextあるから。

(3) XMLで @+id/imageview1 みたいに設定したものを、R.id.~ で指定。


※追記1 :R.id.~ で指定を繰り返し文で行う方法
R.id.imageview1 はR.java で見ると、int で扱われていて、実態は数字。
だからint 型の配列とかに入れてやれば出来る。

例:
int imageViewId[][]={R.id.imageview1,R.id.imageview2,},{R.id.imageview3,R.id.imageview4};

ImageView[][]imageView=new ImageView[imageViewId.length][imageViewId[0].length];

for(int i=0;i<imageViewId.length;i++){
        for(int j=0;j< imageViewId[0].length;j++){
                imageView[i][j]=(ImageView)findViewById(imageViewId[i][j]);
        }
}
imageViewId.length と imageViewId[0].length のところは、二次元配列で各要素の数が揃っていない場合はダメですね。


※追記2 :リソースから取得して、上記をさらに簡潔にする。
こちら
http://d.hatena.ne.jp/hyoromo/20100123/1264221657
を参考にさせていただきました。

getIdentifier がキー。

例:
ImageView[]imageView=new ImageView[5];

for (int i = 0; i < 5; i++) {
        String strNo = String.format("%02d", i);
        imageView[i]=(ImageView)findViewById(getResources().getIdentifier("ImageView"+strNo , "id" , getPackageName()));
}

二次元配列にするなら、データの持たせ方、リソースでのIDの付け方に工夫が必要。

0 件のコメント: