이번 시간에는 저번 포스팅에 이어서 하겠습니다.
8개의 이미지를 섞어서 이미지 버튼에 보여주는
것까지 했습니다.
이번엔 처음에는 기본 이미지들로 보이다가 버튼을
클릭하면 해당 위치의 이미지를 이미지 버튼에 보여주는
기능을 구현해보도록 하겠습니다.
이전 포스팅은 아래 링크를 들어가시면 됩니다.
2022.04.03 - [안드로이드] - [안드로이드] 같은 그림 찾기 게임 만드는 방법 part2 - 이미지 섞기& 보여주기
- 수정 -
2-1 init() : 기본 이미지로 변경
//각 버튼에 이미지 적용
buttons[i].setImageResource(R.drawable.question);
2-2 onClick(): 이미지버튼 클릭 시 데이터와 뷰 변경 기능 구현
//업데이트 모델
updateModel(position);
//업데이트 뷰
updateView(position);
2-3 updateModel, updateView 구현
//데이터 변경
private void updateModel(int position){
MemoryCard card = cards.get(position);
//나중에 카드 비교 할때 뒤집고 다시 클릭하는거 방지
if(card.isFaceUp()){
Toast.makeText(this, "이미 뒤집혔음", Toast.LENGTH_SHORT).show();
return;
}
//반대의 값을 넣는다. 앞면 -> 뒷면 , 뒷면 -> 앞면
cards.get(position).setFaceUp(!card.isFaceUp());
}
//뷰 변경
private void updateView(int position){
MemoryCard card = cards.get(position);
//뒤집었음 랜덤 이미지로 보여준다.
if(card.isFaceUp()){
buttons[position].setImageResource(card.getImageId());
}else{ //기본 이미지
buttons[position].setImageResource(R.drawable.question);
}
}
2-4 전체 코드
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
//버튼 배열
private ImageButton[] buttons = new ImageButton[8];
//이미지 리스트
private ArrayList<Integer> imageList;
//카드 리스트
private ArrayList<MemoryCard> cards;
//결과 텍스트
private TextView resultText;
//초기화 버튼
private Button resetBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
resultText = findViewById(R.id.result_text);
//초기화
init();
resetBtn = findViewById(R.id.reset_btn);
resetBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//초기화
init();
}
});
}//onClick
//초기화
public void init(){
imageList = new ArrayList<>();
//이미지 리스트에 데이터 등록
imageList.add(R.drawable.dog);
imageList.add(R.drawable.pig);
imageList.add(R.drawable.rabbit);
imageList.add(R.drawable.cat);
imageList.add(R.drawable.dog);
imageList.add(R.drawable.pig);
imageList.add(R.drawable.rabbit);
imageList.add(R.drawable.cat);
//순서 섞기
Collections.shuffle(imageList);
//카드 초기화
cards = new ArrayList<>();
// 버튼 초기화
for(int i = 0; i < buttons.length; i++){
String buttonID = "imageBtn" + i;
int resourceID = getResources().getIdentifier(buttonID, "id", getPackageName());
buttons[i] = findViewById(resourceID);
//각 버튼에 클릭이벤트 적용
buttons[i].setOnClickListener(this);
//카드 리스트에 이미지 담기
cards.add(new MemoryCard(imageList.get(i), false, false));
//각 버튼에 기본 이미지로 변경
buttons[i].setImageResource(R.drawable.question);
}
}
//버튼 클릭이벤트
@Override
public void onClick(View view) {
int id = view.getId();
int position = 0;
if(id == R.id.imageBtn0){
position = 0;
}else if(id == R.id.imageBtn1){
position = 1;
}else if(id == R.id.imageBtn2){
position = 2;
}else if(id == R.id.imageBtn3){
position = 3;
}else if(id == R.id.imageBtn4){
position = 4;
}else if(id == R.id.imageBtn5){
position = 5;
}else if(id == R.id.imageBtn6){
position = 6;
}else if(id == R.id.imageBtn7){
position = 7;
}
//업데이트 모델
updateModel(position);
//업데이트 뷰
updateView(position);
}
//데이터 변경
private void updateModel(int position){
MemoryCard card = cards.get(position);
//나중에 카드 비교 할때 뒤집고 다시 클릭하는거 방지
if(card.isFaceUp()){
Toast.makeText(this, "이미 뒤집혔음", Toast.LENGTH_SHORT).show();
return;
}
//반대의 값을 넣는다. 앞면 -> 뒷면 , 뒷면 -> 앞면
cards.get(position).setFaceUp(!card.isFaceUp());
}
//뷰 변경
private void updateView(int position){
MemoryCard card = cards.get(position);
//뒤집었음 랜덤 이미지로 보여준다.
if(card.isFaceUp()){
buttons[position].setImageResource(card.getImageId());
}else{ //기본 이미지
buttons[position].setImageResource(R.drawable.question);
}
}
}//MainActivity
2022.03.28 - [안드로이드] - [안드로이드] 숫자 맞추기 게임 Up&Down 만드는 방법 part1 - 화면 구성
2022.03.29 - [안드로이드] - [안드로이드] 숫자 맞추기 게임 Up&Down 만드는 방법 part2 - 기능 구현
2022.03.23 - [안드로이드] - [안드로이드] tic-tac-toe 보드게임 만드는 방법 part1 - 화면구성
2022.03.24 - [안드로이드] - [안드로이드] tic-tac-toe 보드게임 만드는 방법 part2- 기능구현
[안드로이드] RecyclerView 다중선택 하는 방법 (0) | 2022.04.06 |
---|---|
[안드로이드] 같은 그림 찾기 게임 만드는 방법 part4 - 비교&완료 (0) | 2022.04.05 |
[안드로이드] 같은 그림 찾기 게임 만드는 방법 part2 - 이미지 섞기& 보여주기 (0) | 2022.04.03 |
[안드로이드] 같은 그림 찾기 게임 만드는 방법 part1 - 화면구성 (0) | 2022.04.02 |
[안드로이드] RecyclerView 라디오버튼(RadioButton) 리스트 만드는 방법 (3) | 2022.04.01 |
댓글 영역