2

背景画像が設定された20の画像ビューがあります。

ユーザーが1つの画像をクリックした後、2つ目の画像をクリックすると、2つの画像が表示されます。

imageviewsは、画像の背景を入れ替えることができます。

私が作成したコードを使用すると、最初にクリックした画像だけが彼の背景を更新することがわかりました。

private View z; //view for temporary save the first clicked image public ImageView[] images = new ImageView[20]; //array with my imageviews public void onClick(View v) { if (attivo == false) { attivo = true; z = v; } //save the clicked view to a temporary one else { //we enter here when we click on the second image //this cycles search inside the array which imageview //has the same ID of the saved one or the new one (the first/second image clicked) for (int h = 0; h<20; h++) { if (images[h].getId()== z.getId()) { images[h].setBackgroundDrawable(v.getBackground());} } for (int h = 0; h<20; h++) { if (images[h].getId()== v.getId()) { images[h].setBackgroundDrawable(z.getBackground());} } attivo = false; } }

最初のサイクルは機能します!2番目の背景を最初にクリックしたimageviewに設定します。

コマンドが実行されても、2番目のサイクルは機能しません!背景は常に元の背景です。

私は、バックグラウンドの代わりにsrcを使用するなど、いくつかの異なる方法でそれを行うことができることを知っています。

グリッドビュー。しかし、なぜこのコードが完全に機能しないのか知りたいのですが。

4

1 に答える 1

2

最善の解決策は、バックグラウンド リソースを次の 2 つの変数に格納することです。

Drawable d1 = v1.getBackgound();
Drawable d2 = v2.getBackgound();

そして、その変数を参照するバックグラウンド ドローアブルを設定します。

ある場合:

 images[h].setBackgroundDrawable(d1);
 images[h].setBackgroundDrawable(d2);

およびその逆:

 images[h].setBackgroundDrawable(d2);
 images[h].setBackgroundDrawable(d1);
于 2012-07-04T10:05:18.700 に答える