2017-12-12 2 views
0

in Android Studio Ich entwickelte eine Ansicht, die aus 15 TableRows besteht, und jede TableRow enthält 15 ImageViews. (Jedes ImageView speichert eine Bitmap mit quadratischer Form, und dies erzeugt eine 15 x 15 quadratische Matrix). Relevante Codierung von Ansicht onCreate grob wie folgt:Wie bekomme ich ImageView, das vom Benutzer in ein Array geklickt wurde?

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

Meine Frage ist, wie kann ich wissen, welche Imageview (Total = 15 x 15 = 225) wurde durch die Verwendung von Ereignisse OnClick vom Benutzer angeklickt zu werden? Wenn der Benutzer auf das ImageView klickt, das sich bei (imageViews [13] bei TableRow = 4 befindet), kann ich diese x-y-Koordinateninformation (z. B. x = 13, y = 4) zurückgeben und zu anderen Teilen des Programms zurückkehren?

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??? 

Oder gibt es einen anderen besseren alternativen Weg, dies zu tun?

Antwort

0

können Sie eine Klasse erstellen, die von Image erbt, und innerhalb dieser Klasse erstellen 2 Attribute int x und int y, also wenn onClickListener genannt wird, sollten Sie die View zu Ihrer benutzerdefinierten Klasse werfen.

Beispiel:

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; 

} 

Ich hoffe, es wird Ihnen helfen, sorry für mein Englisch bin ich Anfänger!

0

Um zu wissen, auf welche Bildansicht geklickt wurde, müssen Sie diese Ansicht anhand ihrer ID oder Tag identifizieren. Sie müssen es in Ihrer for-Schleife setzen und dann holen, wenn Sie in onClick-Methode identifizieren möchten.

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

Identifizieren Sie das Bild in Ihrem onClick Methode

@Override 
public void onClick(View v) { 

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

} 
Verwandte Themen