다음과 같이 OnClickListener로 9x9 그리드를 설정하는 보드 게임 클래스가 있습니다.
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.Toast;
public class GameActivity extends Activity {
private ImageAdapter boardAdapter;
private int[][] board = new int[9][9];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game);
for(int i = 0; i < 9; i++) {
board[0][i] = 2;
board[1][i] = 2;
board[7][i] = 1;
board[8][i] = 1;
}
GridView gameGridView = (GridView) findViewById(R.id.game_gridview);
boardAdapter = new ImageAdapter(this, board);
gameGridView.setAdapter(boardAdapter);
AdapterView.OnItemClickListener boardListener = new AdapterView.OnItemClickListener() {
int[][] startPosition;
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if(startPosition == null) {
startPosition = position; // Returns the value at the position, not the position itself, which is what I am looking for
}
boardAdapter.notifyDataSetChanged();
}
};
gameGridView.setOnItemClickListener(boardListener);
}
}
다음은 GridView에 2d 정수 배열을 표시하는 데 사용하는 사용자 지정 BaseAdapter에 대한 코드입니다.
import android.content.Context;
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 context;
int[][] board;
int rowPosition, columnPosition, count;
public ImageAdapter(Context c, int[][] content) {
context = c;
count = 0;
board = new int[content.length][content[0].length];
for (int i = 0; i < board.length; i++)
{
for (int j = 0; j < board[i].length; j++)
{
board[i][j] = content[i][j];
count++;
}
}
rowPosition = 0;
columnPosition = 0;
}
public int getCount() {
return count;
}
public int getRowCount() {
return board.length;
}
public int getColumnCount() {
return board[0].length;
}
public Object getItem(int rowNum, int columnNum) {
return board[rowNum][columnNum];
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(context);
imageView.setLayoutParams(new GridView.LayoutParams(120, 120));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
}
else {
imageView = (ImageView) convertView;
}
columnPosition = position % board[0].length;
rowPosition = (position - columnPosition) / board[0].length;
switch(board[rowPosition][columnPosition]) {
case 1:
imageView.setImageResource(R.drawable.blackpiece);
break;
case 2:
imageView.setImageResource(R.drawable.whitepiece);
break;
default:
imageView.setImageResource(R.drawable.emptypiece);
break;
}
return imageView;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
}
내 문제는 누군가 GridView를 클릭 할 때 2d 배열에서 좌표를 얻는 방법을 잘 모르겠다는 것입니다. 예를 들어 사용자가 gridView의 첫 번째 셀을 클릭하면 position [0] [0] 값이 반환됩니다.
귀하의 질문에 의해 각 2D 배열 위치에서 위치를 변환하고 싶다는 것을 이해합니다 .OnItemClickListener 메서드를 업데이트합니다 .X 및 Y 위치로 u는 2D 배열에서 각각의 값을 얻습니다. 그리드가 9 * 9라고 가정하므로 Column = 9가 아닙니다.
클래스 수준 변수 선언
int columncount = 9;
AdapterView.OnItemClickListener boardListener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
int xpos= position/columncount;
int ypos=position%columncount;
Log.v("position", "position x is :"+xpos+" pos y is :"+ypos);
boardAdapter.notifyDataSetChanged();
}
};
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다