Android + Kotlin

[Android] 안드로이드 로또 번호 추첨기 만들기 _ 2

해니01_15 2025. 1. 23. 22:34

1에서는 기본적인 세팅? 을 했고 이제 xml 화면과 activity를 만들어 볼 것이다.

xml 화면 만드는게 조금 어려워서 고생을 좀 했다.. . . .

 

[ativity_splash.xml]

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".SplashActivity">

    <com.airbnb.lottie.LottieAnimationView
        android:id="@+id/animationView" //activity에서 사용할 아이디 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" //너비와 높이는 부모에 맞춤 
        app:lottie_rawRes="@raw/lotto_main" //lottie 이미지 경로
        android:scaleType="centerCrop" //어떤 형태로 배치 될 것인가 
        app:lottie_loop="true" //반복 
        app:lottie_autoPlay="true" /> //자동재생
 
</androidx.constraintlayout.widget.ConstraintLayout>

 

 

 

[SplashActivity]

package com.example.lotto

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.content.Intent
import android.os.Handler
import android.os.Looper
import com.airbnb.lottie.LottieAnimationView

class SplashActivity : AppCompatActivity(){
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_splash)

        //findViewById 를 사용해 XML에서 정의된 애니메이션 뷰를 찾아온다. 
        val animationView: LottieAnimationView = findViewById(R.id.animationView)

        //특정 작업을 나중에 실행 할 수 있게 handler 객체 정의 
        val handler = Handler(Looper.getMainLooper())
        
        //실행할 작업을 정의 하는 객체(Runnable) 생성
        val runnable = Runnable {
        
             //intent는 안드로이드에서 다른 화며으로 이동할 때 사용하는 객체
            //MainActivity로 이동하겠다는 뜻 
            val intent = Intent(this,MainActivity::class.java)
            
            //intent를 시작하겠다. 
            startActivity(intent)
            finish()
        }
        
        //핸들러를 이용하여 runnable 객체의 실행을 3초 미루겠다는 뜻 
        handler.postDelayed(runnable,3000)
        
        
        //애니메이션 뷰(lottie 이미지)를 클릭했다면 
        animationView.setOnClickListener {
        
            //위에 만든 runnable 객체를 지우고 (즉, 3초 미루지 않고) 
            handler.removeCallbacks(runnable)
            
            //바로 화면을 이동 시켜버리겠다 
            val intent = Intent(this,MainActivity::class.java)
            startActivity(intent)
            finish()
        }


    }
}

 

 

 

[activity_main.xml]

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

   <com.airbnb.lottie.LottieAnimationView
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       app:layout_constraintTop_toTopOf="parent"
       app:lottie_rawRes="@raw/money"
       android:scaleType="fitStart"
       app:lottie_loop="true"
       app:lottie_autoPlay="true"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        android:orientation="horizontal"
        android:gravity="center_horizontal">

        <TextView
            android:id="@+id/number1"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_marginHorizontal="4dp"
            android:gravity="center"
            android:textSize="24sp"
            android:textColor="@android:color/white"
            android:textStyle="bold"
            android:text="로"
            android:background="@drawable/lottery_ball"/>

        <TextView
            android:id="@+id/number2"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_marginHorizontal="4dp"
            android:gravity="center"
            android:textSize="24sp"
            android:textColor="@android:color/white"
            android:textStyle="bold"
            android:text="또"
            android:background="@drawable/lottery_ball"/>

        <TextView
            android:id="@+id/number3"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_marginHorizontal="4dp"
            android:gravity="center"
            android:textSize="24sp"
            android:textColor="@android:color/white"
            android:textStyle="bold"
            android:text="일"
            android:background="@drawable/lottery_ball"/>

        <TextView
            android:id="@+id/number4"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_marginHorizontal="4dp"
            android:gravity="center"
            android:textSize="24sp"
            android:textColor="@android:color/white"
            android:textStyle="bold"
            android:text="등"
            android:background="@drawable/lottery_ball"/>

        <TextView
            android:id="@+id/number5"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_marginHorizontal="4dp"
            android:gravity="center"
            android:textSize="24sp"
            android:textColor="@android:color/white"
            android:textStyle="bold"
            android:text="가"
            android:background="@drawable/lottery_ball"/>

        <TextView
            android:id="@+id/number6"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_marginHorizontal="4dp"
            android:gravity="center"
            android:textSize="24sp"
            android:textColor="@android:color/white"
            android:textStyle="bold"
            android:text="자"
            android:background="@drawable/lottery_ball"/>



    </LinearLayout>

    <com.airbnb.lottie.LottieAnimationView
        android:id="@+id/lotteryButton"
        android:layout_width="300dp"
        android:layout_height="200dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:lottie_autoPlay="false"
        app:lottie_loop="false"
        app:lottie_rawRes="@raw/lotto"
        tools:layout_editor_absoluteY="492dp" />


</androidx.constraintlayout.widget.ConstraintLayout>

 

 

[MainAcitivity]

package com.example.lotto

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.CountDownTimer
import android.widget.TextView
import com.airbnb.lottie.LottieAnimationView

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // TextView들과 LottieAnimationView를 findViewById로 참조
        val number1 = findViewById<TextView>(R.id.number1)
        val number2 = findViewById<TextView>(R.id.number2)
        val number3 = findViewById<TextView>(R.id.number3)
        val number4 = findViewById<TextView>(R.id.number4)
        val number5 = findViewById<TextView>(R.id.number5)
        val number6 = findViewById<TextView>(R.id.number6)
        val lotteryButton = findViewById<LottieAnimationView>(R.id.lotteryButton)

        // TextView 리스트 생성
        val lotteryNumbers = arrayListOf(number1, number2, number3, number4, number5, number6)

        //타이머객체 생성
        val countDownTimer = object : CountDownTimer(3000, 100) { //3초동안 0.1초마다 onTick메서드 호출

            override fun onTick(p0: Long) {

                //고유한 번호를 위한 set생성
                val uniqueNumbers = mutableSetOf<Int>()

                //고유 번호의 set 의 개수가 6개가 될 때까지
                while (uniqueNumbers.size < 6) {
                    val randomNumber = (1..45).random() // 랜덤 번호 생성
                    uniqueNumbers.add(randomNumber) // Set에 추가 (중복 제거)
                }

                //set 을 list 로 변환 하고 정렬
                val sortedNumbers = uniqueNumbers.toList().sorted()

                //TextView 업데이트
                lotteryNumbers.forEachIndexed { index, textView ->
                    textView.text = sortedNumbers[index].toString()
                }
            }
                override fun onFinish() {
                }

            }
        


            // 버튼 클릭 이벤트 설정
            lotteryButton.setOnClickListener {
                if (lotteryButton.isAnimating){
                    lotteryButton.cancelAnimation()
                    countDownTimer.cancel();
                }else {
                    lotteryButton.playAnimation()
                    countDownTimer.start()
                }
            }
        }
    }

 

 

이렇게 하면 오름차순으로 정리 된 로또공들을 볼 수 있다.