본문 바로가기

안드로이드 스튜디오

[안드로이드 스튜디오]자바 주사위 앱 구현하기 및 진동효과(Button,imageView 활용)

최종결과물

이미지 준비해두자.

프론트 부분, 즉 xml 은 여기서 꾸며주면 된다.

일단 메인화면 배경 화면을 app_bg로 설정해두기 위해 아래의 과정을 거친다.

app_bg 선택함으로써 배경 변경 해주고 나머지 부분도 이미지뷰와 버튼 사용해 꾸며주자

마우스 끌어다가 아래 Component Tree에 넣어주기

그럼 이런 이미지가 뜰텐데 각각 화면에 필요한 이미지를 선택해주자.

 

 

Gradle Scripts 에서 아래와 같이 먼저 설정하여 흔들림 효과 추가(Sync Now 우측 상단에 뜨면 꼭 눌러준다)

    implementation("com.daimajia.androidanimations:library:2.4@aar")

자 이제 백엔드 부분도 해자 MainActivity로 들어가준다.

아래와 같이 코드 작성 및 코드 설명

package com.kks.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 {

    // UI 컴포넌트를 위한 멤버 변수 선언
    Button button;
    ImageView imgDice1;
    ImageView imgDice2;

    // 사운드 재생을 위한 MediaPlayer 객체
    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;
        });

        // XML 레이아웃의 UI 컴포넌트를 자바 변수와 연결
        button = findViewById(R.id.button);
        imgDice1 = findViewById(R.id.imgDice1);
        imgDice2 = findViewById(R.id.imgDice2);

        // 주사위 소리를 위한 MediaPlayer 초기화
        mp = MediaPlayer.create(MainActivity.this, R.raw.dice_sound);

        // 버튼 클릭 리스너 설정
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 버튼 누르자마자 주사위 굴리는 소리 재생
                mp.start();

                // 랜덤 숫자 생성 (0~5)
                Random random = new Random();
                int num1 = random.nextInt(6);
                int num2 = random.nextInt(6);

                // 랜덤 숫자에 따라 주사위 이미지 변경
                setDiceImage(imgDice1, num1);
                setDiceImage(imgDice2, num2);

                // 주사위 이미지에 애니메이션 효과 적용
                YoYo.with(Techniques.Shake)
                    .duration(400)
                    .repeat(0)
                    .playOn(imgDice1);
                YoYo.with(Techniques.Shake)
                    .duration(400)
                    .repeat(0)
                    .playOn(imgDice2);
            }
        });
    }

    // 주사위 숫자에 따라 이미지 변경하는 메서드
    private void setDiceImage(ImageView imageView, int num) {
        switch (num) {
            case 0:
                imageView.setImageResource(R.drawable.dice1);
                break;
            case 1:
                imageView.setImageResource(R.drawable.dice2);
                break;
            case 2:
                imageView.setImageResource(R.drawable.dice3);
                break;
            case 3:
                imageView.setImageResource(R.drawable.dice4);
                break;
            case 4:
                imageView.setImageResource(R.drawable.dice5);
                break;
            case 5:
                imageView.setImageResource(R.drawable.dice6);
                break;
        }
    }
}