Kotlin

[android : kotlin] 코틀린 SeekBar사용 예제

SeekBar에서 가장많이 사용되는 속성은 3가지 이다. 그중에 style 속성은 SeekBar의 모양을 설정할 수 있다.  progress 속성은 현재값을 의미하며, max 속성은 프로그래스 바의 최대값을 지정한다. 프로그래스 바와 유사하다. incrementProgressBy속성은 지정된 값 만큼 증가 혹은 감소킨다.

 

setOnSeekBarChangeListener()를 사용하여 SeekBar에 대한 처리를 한다. setOnSeekBarChangeListener()는 오버라이드해야할 메서드(함수)가 3개 이다. 오버라이드 해야할 메소드가 1개 이상인 경우 람다식을 사용하여 선언할 수 없다. 코틀린에서 지원하지 않는다.  그럼으로 중첩클래스를 사용하거나 object 키워드를 사용하여 정의한다.

 

 

[MainActivity.kt]

package edu.kotlin.study

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.RadioGroup
import android.widget.SeekBar
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

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

        seekBar.progress = 3
        seekBar.max = 200
        button.setOnClickListener { seekBar.incrementProgressBy(10) } //버튼 클릭시 마다 10씩 증가
        button2.setOnClickListener {
            seekBar.progress = 3
            seekBar2.progress = 4
        }

        //오버라이드해야할 함수가 여러개 인경우에는 람다식을 사용할 수 없음으로 중첩클래스 방식으로 코딩한다.
        seekBar.setOnSeekBarChangeListener(SeekBarChangerListner())

        //object 키워드 뒤에 구현한 인터페이스 붙여준다.
        seekBar2.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
            override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
                textView.text = "seekbar1 :" + progress
            }

            override fun onStartTrackingTouch(seekBar: SeekBar?) {
                TODO("Not yet implemented")
            }

            override fun onStopTrackingTouch(seekBar: SeekBar?) {
                TODO("Not yet implemented")
            }


        })

    }

    inner class SeekBarChangerListner : SeekBar.OnSeekBarChangeListener{
        //값이 변경되었을때
        override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
            TODO("Not yet implemented")
            textView.text = "seekbar1 :" + progress
        }

        // 터치했을때
        override fun onStartTrackingTouch(seekBar: SeekBar?) {
            TODO("Not yet implemented")
        }

        // 터치 종료했을 때
        override fun onStopTrackingTouch(seekBar: SeekBar?) {
            TODO("Not yet implemented")
        }
    }


}

[activity_main.xml]

<?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:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textAppearance="@style/TextAppearance.AppCompat.Display2" />

    <SeekBar
        android:id="@+id/seekBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <SeekBar
        android:id="@+id/seekBar2"
        style="@style/Widget.AppCompat.SeekBar.Discrete"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:max="10"
        android:progress="3" />

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button" />

    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button" />
</LinearLayout>

[build.gradle(:app)] 

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 29

    defaultConfig {
        applicationId "edu.kotlin.study"
        minSdkVersion 22
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation 'androidx.core:core-ktx:1.3.1'
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'

}

 

Leave a Reply

error: Content is protected !!