2017-12-12 26 views
0

Android Studio에서 15 개의 TableRow로 구성된보기를 개발했으며 각 TableRow에는 15 개의 ImageView가 포함되어 있습니다. (각 ImageView는 정사각형 모양의 비트 맵을 저장하며 15 x 15 정사각형 매트릭스를 생성합니다). 대략 아래보기에서 onCreate의 관련 코딩 : 어떻게 알 수 있습니까Array 내에서 사용자가 클릭하는 ImageView를 얻는 방법은 무엇입니까?

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]); 
} 
.... 

내 질문 인 이미지 뷰 OnClick 이벤트를 활용하여 사용자가 클릭되고 있었다 (= 15 = 225 X (15)가 총)? 즉, 사용자가 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

당신은 이미지 뷰에서 상속하는 클래스를 만들고이 클래스 내에서이 속성을 X 및 INT y를INT를 작성, 그래서 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]); 
} 

당신의 온 클릭 방식에서 이미지를 확인

@Override 
public void onClick(View v) { 

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

}