본문 바로가기
Android

[Android] 주사위 앱 실습: 오픈소스 라이브러리 적용

by eyoo 2022. 7. 8.

주사위 앱에서 깃허브에서 공개된 오픈소스를 적용시켜 애니메이션을 구동해보자.

 

해당 오픈소스를 찾기위해 구글에 github.com android animation를 검색해 찾았다.

 

해당 페이지: 

https://github.com/daimajia/AndroidViewAnimations

 

GitHub - daimajia/AndroidViewAnimations: Cute view animation collection.

Cute view animation collection. Contribute to daimajia/AndroidViewAnimations development by creating an account on GitHub.

github.com

 

 

사용법(Usage)를 참고하니 Gradle에 깃허브에서 제공하는 라이브러리를 임플리먼트 해야한다.

 

Gradle Scripts 에서 build gradle (Module)을 보자.

 

defaultConfig 에서 sdk에 관련되어 설정할수있다.

 

    defaultConfig {
        applicationId "com.eyoo.diceapp"
        minSdk 21
        targetSdk 32
        versionCode 1
        versionName "1.0"

# minSdk는 구동가능한 최소 안드로이드 버전이다

# targetSdk는 앱을 실행하는 목표 안드로이드 버전이다

# versionCode는 버전의 횟수

 

 

dependencies에서는 사용된 라이브러리를 작성한다.

 

dependencies {

    implementation 'androidx.appcompat:appcompat:1.4.2'
    implementation 'com.google.android.material:material:1.6.1'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

 

 

오픈소스 라이브러리를 사용하기위해 dependencies에서 제공하는 라이브러리를 추가하자.

 

implementation 'com.daimajia.androidanimations:library:2.4@aar'

 

 

sync now를 클릭해서 적용시킨다.

 

 

 

이제 주사위에 애니메이션 효과를 주려고 한다.

 

제공된 메뉴얼대로 해보자.

 

먼저 메인 자바 파일로 이동하자.

 

제공된 YoYo 라이브러리를 사용하여  버튼을 누렀을때 주사위 두개 모두 에니메이션 효과가 나오도록 코드작성한다.

 

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.i("MyDiceApp","버튼 눌러짐");

                // 사운드를 튼다.
                mp.start();

...

                // 에니메이션 효과를 준다.

                YoYo.with(Techniques.RollIn).duration(400).repeat(0).playOn(imgDice1);
                YoYo.with(Techniques.RollIn).duration(400).repeat(0).playOn(imgDice2);

 

 

구동이 잘 되는것을 확인할수있다.

 

 

 

 

더보기

 

 

전체 코드:

 

package com.eyoo.diceapp;

import androidx.appcompat.app.AppCompatActivity;

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

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

import java.util.Random;

public class MainActivity extends AppCompatActivity {

    ImageView imgDice1;
    ImageView imgDice2;
    MediaPlayer mp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 화면에서 만든 버튼과 이미지들을 가져온다.
        Button button = findViewById(R.id.button);
        imgDice1 = findViewById(R.id.imgDice1);
        imgDice2 = findViewById(R.id.imgDice2);
        // 사운드 파일도 가져온다.
        mp = MediaPlayer.create(this,R.raw.dice_sound);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.i("MyDiceApp","버튼 눌러짐");

                // 사운드를 튼다.
                mp.start();

                // 1. 랜덤으로 숫자를 하나 가져온다.
                Random random = new Random();
                int number = random.nextInt(6);
                int number2 = random.nextInt(6);

                Log.i("MyDiceApp","number : "+number+" , number2 : "+number2);

                // 2. 그 숫자로 화면의 이미지를 바꿔준다.
                if(number == 0){
                    imgDice1.setImageResource(R.drawable.dice1);
                } else if (number == 1){
                    imgDice1.setImageResource(R.drawable.dice2);
                } else if (number == 2){
                    imgDice1.setImageResource(R.drawable.dice3);
                } else if (number == 3){
                    imgDice1.setImageResource(R.drawable.dice4);
                } else if (number == 4){
                    imgDice1.setImageResource(R.drawable.dice5);
                } else if (number == 5){
                    imgDice1.setImageResource(R.drawable.dice6);
                }

                if(number2 == 0){
                    imgDice2.setImageResource(R.drawable.dice1);
                } else if (number2 == 1){
                    imgDice2.setImageResource(R.drawable.dice2);
                } else if (number2 == 2){
                    imgDice2.setImageResource(R.drawable.dice3);
                } else if (number2 == 3){
                    imgDice2.setImageResource(R.drawable.dice4);
                } else if (number2 == 4){
                    imgDice2.setImageResource(R.drawable.dice5);
                } else if (number2 == 5){
                    imgDice2.setImageResource(R.drawable.dice6);
                }

                // 에니메이션 효과를 준다.

                YoYo.with(Techniques.RollIn).duration(400).repeat(0).playOn(imgDice1);
                YoYo.with(Techniques.RollIn).duration(400).repeat(0).playOn(imgDice2);


            }
        });
    }
}

 

 

 

 

 

댓글