레쭈고 코틀린

Kotlin 10차시

정땅미 2024. 11. 10. 20:23

오늘 코틀린에서 배운 것은 바로바로 ~

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="2410 정상미" />

    <SeekBar
        android:id="@+id/redBar"
        android:layout_margin="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:max="255"
        android:progress="20" />

    <TextView
        android:id="@+id/redText"
        android:layout_marginLeft="30dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="red 값 : " />

    <SeekBar
        android:id="@+id/greenBar"
        android:layout_margin="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:max="255"
        android:progress="20" />

    <TextView
        android:id="@+id/greenText"
        android:layout_marginLeft="30dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="green 값 : " />

    <SeekBar
        android:id="@+id/blueBar"
        android:layout_margin="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:max="255"
        android:progress="20" />

    <TextView
        android:id="@+id/blueText"
        android:layout_marginLeft="30dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="blue 값 : " />

    <Button
        android:id="@+id/bthOk"
        android:layout_margin="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="확인" />

    <View
        android:id="@+id/dpView"
        android:background="#000000"
        android:layout_margin="20dp"
        android:layout_width="match_parent"
        android:layout_height="200dp" />


</LinearLayout>
package com.example.pro1031

import android.graphics.Color
import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.SeekBar
import android.widget.Toast
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat

class MainActivity : AppCompatActivity() {
    var red : Int = 0
    var green : Int = 0
    var blue : Int = 0
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(R.layout.activity_main2)
        this.title = "시크바 이용해서 색상 변화 하기"

        var redBar = findViewById<SeekBar>(R.id.redBar)
        var greenBar = findViewById<SeekBar>(R.id.greenBar)
        var blueBar = findViewById<SeekBar>(R.id.blueBar)
        var btnOk = findViewById<Button>(R.id.bthOk)
        var dpView = findViewById<View>(R.id.dpView)

        redBar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
            override fun onProgressChanged(p0: SeekBar?, p1: Int, p2: Boolean) {
                red = p1
            }

            override fun onStartTrackingTouch(p0: SeekBar?) {

            }

            override fun onStopTrackingTouch(p0: SeekBar?) {

            }
        })

        btnOk.setOnClickListener {
            dpView.setBackgroundColor(Color.rgb(red, green, blue))
            Toast.makeText(applicationContext, "버튼클릭", Toast.LENGTH_SHORT).show()
        }

//        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
//            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
//            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
//            insets
//        }
    }
}

 

이것입니다. ㅡ스ㅡ

이게 뭘까 하시는 분들이 굉장히 많겠지만.. SeekBar 를 당겨서 색상을 바꾸는 코드를 작성하였습니다.

우선 main 에서 red, green, blue 을 뜻하는 SeekBar 세 개를 만들어 줬고, 그리고 확인 버튼, 마지막으로 그 색상을 볼 수 있는 View 위젯도 만들어줬어요!

 

kt 코드에서는 title 을 만들어주고, main 에서 각각 지정한 id 를 가져와줬어요.

가장 주목해야 할 부분은 이 부분입니다!

redBar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
            override fun onProgressChanged(p0: SeekBar?, p1: Int, p2: Boolean) {
                red = p1
            }

            override fun onStartTrackingTouch(p0: SeekBar?) {

            }

            override fun onStopTrackingTouch(p0: SeekBar?) {

            }
        })

 

아직 redBar 밖에 안 했는데요!

Kotlin 에서는 아주 조금만 작성해도 바로 자동완성을 지원해 줘서 너무 편리했어요!

우선 SeekBar 가 반응을 해야 하기 때문에 항상 사용하던 걸 써 줬구요

  • p0: 현재의 SeekBar 객체를 나타냅니다.
  • p1: SeekBar의 현재 값(진행 상태)을 나타냅니다.
  • p2: 사용자가 직접 슬라이더를 움직였는지 여부를 나타내는 Boolean 값입니다.

이렇게 의미해요!

SeekBar 의 진행 상태에 따라 색을 변경할 것이므로 이렇게 작성해주면 됩니닷.

btnOk.setOnClickListener {
            dpView.setBackgroundColor(Color.rgb(red, green, blue))
            Toast.makeText(applicationContext, "버튼클릭", Toast.LENGTH_SHORT).show()
        }

 

그래서 확인 버튼을 눌러주게 되면 View 창의 색이 바뀌게 됩니당!~!

그래서 현재는 red 만 되지만, 코드를 더 작성해주면 green, blue 도 됩니닷!

그리고 짧은 시간 동안 "버튼 클릭" 이라는 문구까지 뜨게 해주면 됩니당.

package com.example.pro1029

import android.os.Bundle
import android.os.SystemClock
import android.view.View
import android.widget.Button
import android.widget.CalendarView
import android.widget.Chronometer
import android.widget.RadioButton
import android.widget.TextView
import android.widget.TimePicker
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat

class MainActivity : AppCompatActivity() {
    var yy : Int = 0
    var mm : Int = 0
    var dd : Int = 0
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(R.layout.activity_main2)
        this.setTitle("시간 예약")
        this.title = "시간 예약"

        var btnStart = findViewById<Button>(R.id.btnStart)
        var btnEnd = findViewById<Button>(R.id.btnEnd)
        var rdoCal = findViewById<RadioButton>(R.id.rdoCal)
        var rdoTime = findViewById<RadioButton>(R.id.rdoTime)
        var calView = findViewById<CalendarView>(R.id.calView1)
        var tPicker = findViewById<TimePicker>(R.id.tiemPick1)
        var chrono = findViewById<Chronometer>(R.id.chronometer1)
        var tvResult = findViewById<TextView>(R.id.tvResult)

        rdoCal.setOnClickListener {
            tPicker.visibility = View.INVISIBLE // 안 보이게
            calView.visibility = View.VISIBLE // 보이게
        }

        rdoTime.setOnClickListener {
            tPicker.visibility = View.VISIBLE // 안 보이게
            calView.visibility = View.INVISIBLE // 보이게
        }

        btnStart.setOnClickListener {
           chrono.base = SystemClock.elapsedRealtime()   // 시작 시간을 가져오는 것
           chrono.start()
        }

        btnEnd.setOnClickListener {
            chrono.stop()
            tvResult.text = " " + yy + "년" + mm + "월" + dd + "일" + tPicker.currentHour + "시" + tPicker.currentMinute + "분"
        }

        calView.setOnDateChangeListener { calendarView, i, i2, i3 ->
            yy = i
            mm = i2 + 1
            dd = i3
        }



//        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
//            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
//            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
//            insets
//        }
    }
}

 

이 코드는 약간 보너스로 저번에 하던 것인데요~

저번에 특정 버튼을 누르면, 뭐가 안 보이게 하고 보이게 하고 했잖아요!

거기서 이제 시간을 보여줄 건데요~

시간 보여지는 양식은 다른 것과 비슷해요!

btnEnd.setOnClickListener {
            chrono.stop()
            tvResult.text = " " + yy + "년" + mm + "월" + dd + "일" + tPicker.currentHour + "시" + tPicker.currentMinute + "분"
        }

        calView.setOnDateChangeListener { calendarView, i, i2, i3 ->
            yy = i
            mm = i2 + 1
            dd = i3
        }

 

이렇게 작성해 줬구요.

먼저 시계를 멈춰서 현재 시간을 담아 줘야 해요!

yy 는 년도, mm 은 월, dd 는 일을 해서 시간을 담아 주구요.

 

밑에서 월은 0월부터 시작하므로 더하기 1 을 해 줬어요!

그럼 아주 완벽하게 실행 결과가 나올 것입니닷.

 

모두 코틀린도 열심히 배우시고,... 저는 너무나 어렵네요ㅠㅠ

모두 파이팅! 

'레쭈고 코틀린' 카테고리의 다른 글

Kotlin 11차시  (2) 2024.11.26
Kotlin 9차시  (1) 2024.10.31
Kotlin 8차시  (3) 2024.10.23
Kotlin 7차시  (3) 2024.10.21
Kotlin 6차시  (3) 2024.09.27