2012-03-03 162 views
0

我想做一個3x3網格佈局的圖像(ImageView),並且一旦用戶點擊任何圖像上該圖像的照片改變,我在這裏面臨的問題是,我無法找到正在點擊的圖像,以便我可以更改它上面的照片。我想寫遊戲是一個簡單的井字
1)這裏是我的主要活動代碼如何在單擊網格佈局時更改圖像?

package eg.edu.guc; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ImageView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.GridView; 
//import android.widget.Toast 

public class AndXOActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     GridView gridView = (GridView) findViewById(R.id.gridview); 

     // Instance of ImageAdapter Class 
     gridView.setAdapter(new ImageAdapter(this)); 

     gridView.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
       //Toast.makeText(AndXOActivity.this, "" + position, Toast.LENGTH_SHORT).show(); 
       //ImageView imageView = new ImageView(getMContext()); 
       getImageView().setImageResource(R.drawable.x); 
      } 
     }); 
    } 
} 

2)下面是ImageAdapter類

import android.content.Context; 
import android.database.DataSetObserver; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.GridView; 
import android.widget.ImageView; 

public class ImageAdapter extends BaseAdapter { 

     private Context mContext; 
     public ImageView imageView; 

     public ImageView getImageView() { 
     return imageView; 
    } 

     // Keep all Images in array 
     public Integer[] mThumbIds = { 
       R.drawable.sample_0, R.drawable.sample_1, 
       R.drawable.sample_2, R.drawable.sample_3, 
       R.drawable.sample_4, R.drawable.sample_5, 
       R.drawable.sample_6, R.drawable.sample_7, 
       R.drawable.x, R.drawable.o 

     }; 

     // Constructor 
     public ImageAdapter(Context c){ 
      mContext = c; 
     } 
     public Context getMContext() { 
      return mContext; 
     } 

     @Override 
     public int getCount() { 
      return mThumbIds.length; 
     } 

     @Override 
     public Object getItem(int position) { 
      return mThumbIds[position]; 
     } 

     @Override 
     public long getItemId(int position) { 
      return 0; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      imageView = new ImageView(mContext); 
      imageView.setImageResource(R.drawable.tile); 
      imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      imageView.setLayoutParams(new GridView.LayoutParams(70, 70)); 
      return imageView; 
     } 
    } 

3碼)這裏是.xml文件

<?xml version="1.0" encoding="utf-8"?> 
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/gridview" 
    android:layout_width="150dp" 
    android:layout_gravity="center" 
    android:layout_height="150dp" 
    android:columnWidth="90dp" 
    android:numColumns="3" 
    android:verticalSpacing="5dp" 
    android:horizontalSpacing="5dp" 
    android:gravity="center" 
/> 

請告訴我,我應該怎麼做,使圖像變化,一旦我點擊ImageView的!

回答

0

1.在ImageViews自身上循環,給它們全部相同的OnClickListener,但也用一個索引標記它們到你擁有的那個圖像數組中。在偵聽器中,獲取標籤,索引到數組中,然後在知道與ImageView關聯的圖像後更改標籤,然後執行所需的操作。

一個例子:

@Override 
public void onCreate(Bundle bundle) { 
    super.onCreate(bundle); 
    setContentView(R.layout.select); 
    OnClickListener listener = new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Intent i = new Intent(SelectActivity.this, QuizActivity.class); 
     i.putExtra("quiz#", ((Integer) v.getTag()).intValue()); // <------ 
     i.putExtra("mode", ((RadioGroup) findViewById(R.id.modeSelect)).getCheckedRadioButtonId()); 
     startActivity(i); 
    } 
    }; 

    int index = 0; 
    for (int quiz: Quizzes.quizzes) { 
    Button b = (Button) findViewById(quiz); 
    b.setOnClickListener(listener); 
    b.setTag(Integer.valueOf(index++)); // <------ 
    } 
} 

2.忘記ImageViews的這個GridView的。相反,子類View和繪製井字棋板,並讓你的棋盤響應點擊。在棋盤計算出點擊的象限後,它可以引用它自己的遊戲內部模型來決定如何進行,當它重新繪製時,它可以再次使用該模型重新繪製。沒有「我點擊了什麼圖片?」邏輯更接近井字遊戲的邏輯。如果您以前從未這樣做過,請從Snake SDK示例中學習TileView

0

讓這個嘗試,因爲在你的GridView的每個產品的ImageView

@Override 
public ImageView getItem(int position) { 
    return mThumbIds[position]; 
} 

,並使用該方法來獲得項目的右側位置

gridView.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
      parent.getItemAtPosition(position).setImageResource(R.drawable.x); 
     } 
    });