카테고리 없음

2019년 9월 6일 1 TO 25(2)-Activity

타코따코 2019. 9. 6. 15:58

정리

멤버변수 Button[] btns= new Button[25]; 도 가능하다.

중복값 가지지 않는 코드

 

for(int i=0; i<btns.length; i++){
btns[i]=findViewById(R.id.btn01+i);
btns[i].setText(arr[i]+"");       //각 참조변수 배열에 xml에 설정한 btn들을 연결함.  

 

public void clickbtn(View v){ //onclick의 규칙 : public 일 것, return타입은 void일 것, 파라미터가 무조건 1개 있어야함. - view타입

Button btn = (Button)v; 
String s = btn.getText().toString(); 
int n = Integer.parseInt(s);

 

btn.setBackgroundColor(Color.TRANSPARENT); //버튼배경화면 투명하게
btn.setTextColor(0x88FF0000);  //버튼의 폰트색깔 조정. 16진수 

 

package com.tistory.firewallgogo.mp02oneto25;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.util.Random;

 

public class MainActivity extends AppCompatActivity {

TextView tv;
Button btn_retry;
Button[] btns= new Button[25]; //Button참조변수가 25개짜리인 배열객체. (버튼이 25개 만들어진 것은 아님)

//현재 눌러야할 번호
int number=1; //빨간색번호

//버튼 배경그림객체 참조변수
Drawable backDrawble;   //가끔식 빨간색이 뜨는 이유는 import 자동완성안하고 끝까지 써서.
                                  //이 부분은 배우지 않아 pass하기로 함. 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

tv=findViewById(R.id.tv);
btn_retry=findViewById(R.id.btn_retry);   //각각의 참조변수를 우선 onCreate에 넣자. 

Random rnd = new Random();

//중복되지 않는 랜덤값 25개를 가진 배열  - //중복값 가지지 않는 코드 
int[] arr = new int[25];
for(int i=0; i<25; i++){
arr[i] = rnd.nextInt(25)+1;//1-25
for(int k=0; k<i; k++){
if(arr[i]==arr[k]){
i--;
break;
}}}

//Button 참조변수들에게 Button 객체들 대입하기
for(int i=0; i<btns.length; i++){
btns[i]=findViewById(R.id.btn01+i);//btn0i는 불가능함. 변수명이니까. 대신에 +i이 가능함.
btns[i].setText(arr[i]+""); // +""추가해서 문자열로 만들기
//btns[i].setTag(arr[i]+""); //<--- 번호를 넣는 방법임.

}

//버튼의 배경이미지 얻어오기
backDrawble = btns[0].getBackground();

}//onCreate Method..

//xml onclick ="clickbtn"를 만듦.
//onClick속성에 지정한 callback 메소드
//onclick속성으로 지정한 메소드가 자동 실행됨
public void clickbtn(View v){ //onclick의 규칙 : public 일 것, return타입은 void일 것, 파라미터가 무조건 1개 있어야함. - view타입
//매개변수로 전달된 View v가 현재 클릭한 뷰(버튼)

//버튼 누른 녀석이 v라는 뜻
//클릭된 버튼의 글씨를 얻어오기
Button btn = (Button)v; //다운캐스팅(자식->부모 가르키는 상황) - v가 버튼임을 인지함. 
String s = btn.getText().toString(); //잠시 // 함 문자열 - String, 케릭시퀀스 .toString을 쓰면 케릭씨퀀스-->String으로 바뀜. // 캐릭시퀀스가 상위라서 .toString으로 써야함

//버튼에 기록된 tag값을 얻어오기
//String s = btn.getTag().toString(); //getTag() obejct이기때문에 이게 알아들으려면 .toString으로 해야함.

//얻어온 글씨를 int형으로 변환
int n = Integer.parseInt(s);
//얻어온 글씨와 현재 누를 번호(number)와 같은지 비교
if(number == n){
//눌러야할 번호를 잘 눌렀다라는 의미
btn.setText("OK"); //버튼의 글씨변경
btn.setBackgroundColor(Color.TRANSPARENT);
btn.setTextColor(0x88FF0000); //XML이 아니기 때문에 자바 16진수는 0x 영엑스 , ARGB이기 때문에

//버튼을 안보이도록 하려면..visible -> invisible
btn.setVisibility(View.INVISIBLE);

//눌러야 번호를 증가
number++;
if(number>25){
tv.setText("축하합니다 끝났습니다.");
btn_retry.setEnabled(true);
}
else{
tv.setText(number+"");
}
}
}//clickbtn

 

//여기는 retry부분임. - 아직 안 배우는 것들이 많다. 
//retry버튼에 지정된 onclick속성 콜백메소드
public void clickretry(View v){
Random rnd = new Random();

//중복검사 -
int[] arr =new int[25];
for(int i=0; i<arr.length; i++){
arr[i]=rnd.nextInt(25)+1;
for(int k=0; k<i; k++){
if(arr[i]==arr[k]){
i--;
break;
}}}


//다시 새롭게 숫자 넣는 방식, 숫자는 다시 검은색으로. 
for(int i=0; i<btns.length; i++){
btns[i].setText(arr[i]+"");
//btns[i].setTag(arr[i]);
btns[i].setTextColor(Color.BLACK);
btns[i].setBackground(backDrawble);
}
number=1;
tv.setText(number+"");
btn_retry.setEnabled(false);
}


}//main class