如何在Kotlin中修改TickSeekBar的刻度值并输出日志
实现方案
1. 自定义刻度文本为2 4 6 8
该组件支持直接传入自定义刻度文本集合,无需依赖默认的min/max参数生成数值,两种实现方式修改如下:
XML布局写法
在原有布局属性基础上新增自定义刻度数组属性:
<com.warkiz.tickseekbar.TickSeekBar android:id="@+id/tsb1" android:layout_width="286dp" android:layout_height="wrap_content" app:tsb_ticks_count="4" app:tsb_thumb_color="@color/skyblue" app:tsb_thumb_size="16dp" app:tsb_show_tick_marks_type ="oval" app:tsb_tick_marks_color="@color/skyblue" app:tsb_tick_marks_size="8dp" app:tsb_show_tick_texts="below" app:tsb_tick_texts_color="@color/black" app:tsb_tick_texts_size="17sp" app:tsb_track_background_color="@color/divid_color" app:tsb_track_background_size="2dp" app:tsb_track_progress_color="@color/skyblue" app:tsb_track_progress_size="3dp" android:layout_marginTop="90dp" android:layout_marginLeft="40dp" <!-- 新增自定义刻度文本属性 --> app:tsb_tick_texts_array="@array/custom_ticks"/>
在res/values/arrays.xml中添加刻度数组:
<resources> <string-array name="custom_ticks"> <item>2</item> <item>4</item> <item>6</item> <item>8</item> </string-array> </resources>
动态创建Kotlin写法
直接传入自定义文本数组,调整对应参数即可:
// 定义自定义刻度数组 val customTicks = arrayOf("2", "4", "6", "8") val seekBar = TickSeekBar .with(context!!) // 4个刻度对应索引0-3,设置min和max和索引范围匹配 .max(3F) .min(0F) .progressValueFloat(true) .progress(0f) // 默认选中第一个刻度值2 .tickCount(4) // 和数组长度保持一致 // 传入自定义刻度文本 .tickTextsArray(customTicks) .showTickMarksType(TickMarkType.DIVIDER) .tickMarksColor(resources.getColor(R.color.skyblue)) .tickMarksSize(6) //dp .tickTextsSize(13) //sp .showTickTextsPosition(TextPosition.ABOVE) .tickTextsColorStateList(resources.getColorStateList(R.color.skyblue)) .thumbColor(Color.parseColor("#ff0000")) .thumbSize(14) .trackProgressColor(resources.getColor(R.color.colorAccent)) .trackProgressSize(4) .trackBackgroundColor(resources.getColor(R.color.skyblue)) .trackBackgroundSize(2) .build()
2. 监听选中值输出日志
给组件设置滑动监听,通过选中位置匹配自定义数组的值输出日志即可:
// 若为XML布局引入,先获取自定义数组 val customTicks = resources.getStringArray(R.array.custom_ticks) tsb1.setOnSeekChangeListener(object : OnSeekChangeListener { override fun onSeeking(seekParams: SeekParams?) { seekParams?.let { val selectedValue = customTicks[it.progress] Log.d("TickSeekBar", "当前选中值:$selectedValue") } } override fun onStartTrackingTouch(seekBar: TickSeekBar?) {} override fun onStopTrackingTouch(seekBar: TickSeekBar?) {} })
内容的提问来源于stack exchange,提问作者suny jung
相关产品推荐
相关产品推荐

