2017-12-12 10 views
0

私は15のTableRowで構成されるビューを開発し、各TableRowには15のImageViewが含まれています。 (各ImageViewは正方形のビットマップを格納し、これは15 x 15正方行列を生成します)。おおよそ以下のように表示のonCreateの関連コーディング:Array内でユーザーがクリックしていたImageViewを取得するにはどうすればよいですか? Android Studioの

TableLayout tableLayout = (TableLayout) findViewById(R.id.tableLayout); 
TableRow[] tr = new TableRow[15]; 

for (int i = 0; i < 15; i++) { 
    tr[i] = new TableRow(this); 

    for (int j = 0; j < 15; j++) { 
     bmp = BitmapFactory.decodeResource(getResources(),R.drawable.jmpty); 
     imageViews[j] = new ImageView(this); 
     imageViews[j].setImageBitmap(bmp); 
     imageViews[j].setOnClickListener(new doSomething()); 

     tr[i].addView(imageViews[j],oParams); 
    } 
    tableLayout.addView(tr[i]); 
} 
.... 

私の質問は、私はImageViewの(= 15×15 = 225の合計)はOnClickイベントを利用することにより、ユーザーがクリックされた知っていますかですか?すなわち、ユーザが(TableRow = 4にあるimageViews [13]にある)ImageViewをクリックすると、このx-y座標情報(例えばx = 13、y = 4)を取得してプログラムの他の部分に戻ることができるか?

private class doSomething implements View.OnClickListener { 
    @Override 
    public void onClick(View v) { 
     ImageView iv = (ImageView) v; 
     ...... 
     // what I want: 
     int x = iv.GetImageViewNumber(); // how can I do this??? 
     int y = iv.GetTableRowNumber(); // how can I do this??? 

これを行うには他にも優れた方法がありますか?

答えて

0

あなたはImageViewのを継承するクラスを作成し、このクラス内で2つの属性int型のxint型のyのを作成し、onClickListenerが呼び出されたときつまり、あなたのカスタムクラスにViewをキャストする必要がありますすることができます。

例:

public calss MyCustomImageView extends ImageView{ 
    public int x; 
    public int y; 
} 

TableLayout tableLayout = (TableLayout) findViewById(R.id.tableLayout); 
TableRow[] tr = new TableRow[15]; 

for (int i = 0; i < 15; i++) { 
    tr[i] = new TableRow(this); 

    for (int j = 0; j < 15; j++) { 
     bmp = BitmapFactory.decodeResource(getResources(),R.drawable.jmpty); 
     imageViews[j] = new MyCustomImageView(this); 
     imageViews[j].setImageBitmap(bmp); 
     imageViews[j].setOnClickListener(new doSomething()); 
     imageViews[j].x = i; 
     imageViews[j].y = j; 

     tr[i].addView(imageViews[j],oParams); 
    } 
    tableLayout.addView(tr[i]); 
} 

@Override 
public void onClick(View v) { 
    MyCustomImageView iv = (MyCustomImageView) v; 

    int x = iv.x; 
    int y = iv.y; 

} 

私は初心者だ私の英語のため申し訳ありませんが、それはあなたを助けることを願っています!

0

どの画像ビューがクリックされたかを知るには、その画像をIDまたはTagで識別する必要があります。 forループでそれを設定し、onClickメソッドで識別したいときに取得する必要があります。

String tagString = "Image"; 
for (int i = 0; i < 15; i++) { 
tr[i] = new TableRow(this); 

    for (int j = 0; j < 15; j++) { 
     bmp = BitmapFactory.decodeResource(getResources(),R.drawable.jmpty); 
     imageViews[j] = new ImageView(this); 
     imageViews[j].setImageBitmap(bmp); 

     //setting image tag for each image in "Image1", "Image2"... format 
     imageViews[j].setTag(tagString+j); 

     imageViews[j].setOnClickListener(new doSomething()); 

     tr[i].addView(imageViews[j],oParams); 
    } 
    tableLayout.addView(tr[i]); 
} 

あなたのonClickメソッドで画像を確認し

@Override 
public void onClick(View v) { 

Toast.makeText(this, "Clicked items is "+v.getTag().toString(), Toast.LENGTH_SHORT).show();; 

} 
関連する問題