[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'
}