1

所以我有一个控制“宽度”“长度”的“两者” ,如下所示:Slider Slider 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(重要),我设置了

在两者 上加/减值 1 时Slider,其他两个也将加/减值 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
}

奇怪的事情发生了,宽度高度 的反应似乎Slider有点慢(我猜),并跳过一些点:

在此处输入图像描述

它们应该是同步的,因为它们具有相同stepSize的值范围(只是初始值不同)。任何帮助,将不胜感激。

4

2 回答 2

3

使用“两者”滑块的当前值来设置其他滑块的值。

binding.bothSlider.addOnChangeListener { _, value, _->
    binding.widthSlider.value = value
    binding.heightSlider.value = value
}

很难确切地知道您要做什么。你也可以做一些与你所拥有的类似的事情,但使用 diff 而不是仅仅1

binding.bothSlider.addOnChangeListener { slider, value, fromUser ->
    val diff = value - previousValue
    binding.widthSlider.value += diff
    binding.heightSlider.value += diff

    previousValue = value
}

这将使滑块发散,但仍会解决您遇到的“速度”问题。

于 2021-01-17T23:50:56.850 回答
2

那些滑块似乎有不同的比例......

但实际上它是创建偏移量的初始值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"/> 
于 2021-01-17T23:59:50.620 回答