2012-03-03 3 views
0

이미지 (ImageView)의 3x3 격자 레이아웃을 만들려고합니다. 사용자가 이미지의 이미지를 클릭하면 해당 이미지의 사진이 변경됩니다. 여기서 내가 직면 한 문제는 참조를 찾을 수 없다는 것입니다. 이미지를 클릭하면 사진을 변경할 수 있습니다. 나는 쓰기를 시도하고이 게임은 간단한 콩알 발가락
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" 
/> 

이다 나는 내가 이미지 뷰를 클릭하면 이미지 변화를 만들기 위해 어떻게해야 말해주세요!

답변

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 View를 서브 클래 싱하여 tic-tac-toe 보드를 직접 그린 다음 보드가 클릭에 응답하도록하십시오. 보드가 클릭 된 사분면을 계산 한 후에는 게임 자체의 내부 모델을 참조하여 진행 방법을 결정할 수 있고 다시 그려 질 때 다시 모델을 사용하여 다시 그릴 수 있습니다. "어떤 그림을 클릭 했습니까?" 논리는 tic-tac-toe의 논리에 더 가깝습니다. 이전에이 작업을 수행 한 적이 없다면 Snake SDK 샘플에서 TileView을 학습하십시오.

0

하면있는 gridview의 각 항목은 이미지 뷰이기 때문에의이 함께 해보자

@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); 
     } 
    }); 
관련 문제