본문 바로가기
Aandroid Studio/기능

[android] 버튼을 클릭하면, 동작하는 코드 setOnClickListener() 함수

by 코끼리똥11 2024. 6. 4.

화면에 코드로 조작할 클래스를 멤버변수로 만들어준다.
변수명은, 화면의 아이디 값과 똑같이 지어주면, 개발이 편하다.

    Button button;
    ImageView imgDice1;
    ImageView imgDice2;

 

화면에서 만든 UI 컴포넌트와 자바의 변수를 연결한다.!

        button = findViewById(R.id.button);
        imgDice1=findViewById(R.id.imgDice1);
        imgDice2=findViewById(R.id.imgDice2);

 

setOnClickListener 함수에 있는 View.OnClickListener() 파라미터를 이용해 버튼을 누를때마다 난수를 생성하고 난수에 해당하는 이미지 파일로 바뀌는 코드이다.

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 0. 버튼 누르자마자 주사위 굴리는 소리를 낸다.
                mp.start();
                // 1. 랜덤으로 숫자를 2개 가져온다.
                Random random = new Random();
                int num1=random.nextInt(6); //0~5까지 정수를 가져오라는 뜻.
                int num2=random.nextInt(6); //
                // 2. 해당 숫자에 맞게, 주사위 이미지를 바꿔준다.

                if (num1==0){
                    // 주사위 1에 해당되는 이미지를, 이미지 뷰에 표시한다.
                    imgDice1.setImageResource(R.drawable.dice1);
                } else if (num1 == 1){
                    imgDice1.setImageResource(R.drawable.dice2);
                } else if (num1 == 2){
                    imgDice1.setImageResource(R.drawable.dice3);
                } else if (num1 == 3){
                    imgDice1.setImageResource(R.drawable.dice4);
                } else if (num1 == 4){
                    imgDice1.setImageResource(R.drawable.dice5);
                } else if (num1 == 5) {
                    imgDice1.setImageResource(R.drawable.dice6);
                }

                if (num2==0){
                    // 주사위 1에 해당되는 이미지를, 이미지 뷰에 표시한다.
                    imgDice2.setImageResource(R.drawable.dice1);
                } else if (num2 == 1){
                    imgDice2.setImageResource(R.drawable.dice2);
                } else if (num2 == 2){
                    imgDice2.setImageResource(R.drawable.dice3);
                } else if (num2 == 3){
                    imgDice2.setImageResource(R.drawable.dice4);
                } else if (num2 == 4){
                    imgDice2.setImageResource(R.drawable.dice5);
                } else if (num2 == 5) {
                    imgDice2.setImageResource(R.drawable.dice6);
                }

                // 3. 에니메이션 효과를 준다.
                YoYo.with(Techniques.Shake).duration(400).repeat(0)
                        .playOn(imgDice1);
                YoYo.with(Techniques.Shake).duration(400).repeat(0)
                        .playOn(imgDice2);
            }

View.OnClickListener()

 

전체 코드

package com.example.diceapp;

import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

import com.daimajia.androidanimations.library.Techniques;
import com.daimajia.androidanimations.library.YoYo;

import java.util.Random;

public class MainActivity extends AppCompatActivity {

    // 화면에 코드로 조작할 클래스를 멤버변수로 만들어준다.
    // 변수명은, 화면의 아이디 값과 똑같이 지어주면, 개발이 편하다.
    Button button;
    ImageView imgDice1;
    ImageView imgDice2;

    MediaPlayer mp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_main);
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
            return insets;
        });

        // 화면에서 만든 UI 컴포넌트와 자바의 변수를 연결한다.!
        button = findViewById(R.id.button);
        imgDice1=findViewById(R.id.imgDice1);
        imgDice2=findViewById(R.id.imgDice2);
        mp = MediaPlayer.create(MainActivity.this,R.raw.dice_sound);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 0. 버튼 누르자마자 주사위 굴리는 소리를 낸다.
                mp.start();
                // 1. 랜덤으로 숫자를 2개 가져온다.
                Random random = new Random();
                int num1=random.nextInt(6); //0~5까지 정수를 가져오라는 뜻.
                int num2=random.nextInt(6); //
                // 2. 해당 숫자에 맞게, 주사위 이미지를 바꿔준다.

                if (num1==0){
                    // 주사위 1에 해당되는 이미지를, 이미지 뷰에 표시한다.
                    imgDice1.setImageResource(R.drawable.dice1);
                } else if (num1 == 1){
                    imgDice1.setImageResource(R.drawable.dice2);
                } else if (num1 == 2){
                    imgDice1.setImageResource(R.drawable.dice3);
                } else if (num1 == 3){
                    imgDice1.setImageResource(R.drawable.dice4);
                } else if (num1 == 4){
                    imgDice1.setImageResource(R.drawable.dice5);
                } else if (num1 == 5) {
                    imgDice1.setImageResource(R.drawable.dice6);
                }

                if (num2==0){
                    // 주사위 1에 해당되는 이미지를, 이미지 뷰에 표시한다.
                    imgDice2.setImageResource(R.drawable.dice1);
                } else if (num2 == 1){
                    imgDice2.setImageResource(R.drawable.dice2);
                } else if (num2 == 2){
                    imgDice2.setImageResource(R.drawable.dice3);
                } else if (num2 == 3){
                    imgDice2.setImageResource(R.drawable.dice4);
                } else if (num2 == 4){
                    imgDice2.setImageResource(R.drawable.dice5);
                } else if (num2 == 5) {
                    imgDice2.setImageResource(R.drawable.dice6);
                }

                // 3. 에니메이션 효과를 준다.
                YoYo.with(Techniques.Shake).duration(400).repeat(0)
                        .playOn(imgDice1);
                YoYo.with(Techniques.Shake).duration(400).repeat(0)
                        .playOn(imgDice2);
            }
        });

    }
}