问题描述
所以我有一个 "both" Slider
控制 "width" Slider
和 "length" Slider
,如下所示:
<com.google.android.material.slider.Slider
android:id="@+id/width_slider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:value="40"
android:valueFrom="0" <-
android:valueto="200" <-
android:stepSize="1"/> <-
<com.google.android.material.slider.Slider
android:id="@+id/height_slider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:value="40"
android:valueFrom="0" <-
android:valueto="200" <-
android:stepSize="1"/> <-
<com.google.android.material.slider.Slider
android:id="@+id/both_slider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:value="100"
android:valueFrom="0" <-
android:valueto="200" <-
android:stepSize="1"/> <-
正如我在上面标记的,它们都有相同的范围(从 & 到)和 stepSize
到 1(重要),我设置了
在两者 Slider
上加/减值1时,其他两个也会加/减值1。
代码如下:
private var prevIoUsValue = 50f //initial value,same as on xml
binding.bothSlider.addOnchangelistener { slider,value,fromUser ->
if (value > prevIoUsValue) {
binding.widthSlider.value++
binding.heightSlider.value++
}
if (value < prevIoUsValue) {
binding.widthSlider.value--
binding.heightSlider.value--
}
prevIoUsValue = value
}
奇怪的事情发生了,似乎 width 和 height Slider
的反应有点慢(我猜),并跳过某些点:
它们应该是同步的,因为它们具有相同的 stepSize
和取值范围(只是初始值不同)。任何帮助将不胜感激。
解决方法
使用“both”滑块的当前值来设置其他滑块的值。
binding.bothSlider.addOnChangeListener { _,value,_->
binding.widthSlider.value = value
binding.heightSlider.value = value
}
要确切地知道您要做什么有点困难。你也可以做一些类似的事情,但使用 diff 而不仅仅是 1
:
binding.bothSlider.addOnChangeListener { slider,fromUser ->
val diff = value - previousValue
binding.widthSlider.value += diff
binding.heightSlider.value += diff
previousValue = value
}
这将使滑块发散,但仍将解决您遇到的“速度”问题。
,那些滑块似乎有不同的比例...
但实际上是初始值产生了 60
的偏移量:
<com.google.android.material.slider.Slider
android:id="@+id/both_slider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:value="40" <-- 100 != 40
android:valueFrom="0"
android:valueTo="200"
android:stepSize="1"/>