Android 个固定数字的滑块
Android sliders with fixed numbers
我正在尝试实现一个具有固定值的离散滑块,但我唯一可以设置的是 valueFrom、valueTo 和 stepSize。
这是我的代码,我正在尝试如何做
<com.google.android.material.slider.Slider
android:id="@+id/slider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="8dp"
app:tickColor="@color/colorSecondaryLight"
app:tickColorActive="@color/colorSecondary" />
有没有办法在滑块上设置固定值? (我将使用 2、5、10、25、50 和 100 的值)
你最好使用 SeekBar
<SeekBar
android:id="@+id/sb"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="10"
android:thumb="@drawable/ic_location"
android:theme="@style/Widget.AppCompat.SeekBar.Discrete" />
您可以使用 SeekBar
并定义值的范围,为了移除 smoothness/refining 滚动,设置 OnSeekBarChangeListener
并覆盖 onProgressChanged()
通过如下再次设置进度,您需要的 SeekBar
值的有效范围。
例子
使用最大值为 100、步长为 10 的 SeekBar
;所以总有效值为 10.
SeekBar seekBar = findViewById(R.id.seekbar);
seekBar.setMax(100);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean
fromUser) {
seekBar.setProgress((progress / 10) * 10);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
对我有用的解决方案是这个名为 BubbleSeekBar
的库
第 1 步 - 添加对 Gradle 的依赖项。
implementation "com.xw.repo:bubbleseekbar:3.20-lite"
第 2 步 - 在 XML 上创建 BubbleSeekBar 并添加您需要的属性。对于我的情况,下面的示例有效。
<com.xw.repo.BubbleSeekBar
android:id="@+id/bubbleSeekBar"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:bsb_auto_adjust_section_mark="true"
app:bsb_hide_bubble="true"
app:bsb_min="2"
app:bsb_section_count="5"
app:bsb_section_text_position="below_section_mark"
app:bsb_seek_by_section="true" />
第 3 步 - 因为我需要自定义选项,所以我使用 string.xml
上声明的值数组在 onCreate 上进行了初始化
bubbleSeekBar.setCustomSectionTextArray { sectionCount, array ->
array.clear()
for ((index, value) in resources.getStringArray(R.array.xxxx)
.withIndex()) {
array.put(index, value)
}
array
}
第 4 步 - 您可以使用以下方法捕获更改或设置值。
bubbleSeekBar.onProgressChangedListener
bubbleSeekBar.setProgress()
这个库非常好,对我有用。有关详细信息,请查看此答案顶部的 link。
我正在尝试实现一个具有固定值的离散滑块,但我唯一可以设置的是 valueFrom、valueTo 和 stepSize。
这是我的代码,我正在尝试如何做
<com.google.android.material.slider.Slider
android:id="@+id/slider"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="8dp"
app:tickColor="@color/colorSecondaryLight"
app:tickColorActive="@color/colorSecondary" />
有没有办法在滑块上设置固定值? (我将使用 2、5、10、25、50 和 100 的值)
你最好使用 SeekBar
<SeekBar
android:id="@+id/sb"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="10"
android:thumb="@drawable/ic_location"
android:theme="@style/Widget.AppCompat.SeekBar.Discrete" />
您可以使用 SeekBar
并定义值的范围,为了移除 smoothness/refining 滚动,设置 OnSeekBarChangeListener
并覆盖 onProgressChanged()
通过如下再次设置进度,您需要的 SeekBar
值的有效范围。
例子
使用最大值为 100、步长为 10 的 SeekBar
;所以总有效值为 10.
SeekBar seekBar = findViewById(R.id.seekbar);
seekBar.setMax(100);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean
fromUser) {
seekBar.setProgress((progress / 10) * 10);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
对我有用的解决方案是这个名为 BubbleSeekBar
的库第 1 步 - 添加对 Gradle 的依赖项。
implementation "com.xw.repo:bubbleseekbar:3.20-lite"
第 2 步 - 在 XML 上创建 BubbleSeekBar 并添加您需要的属性。对于我的情况,下面的示例有效。
<com.xw.repo.BubbleSeekBar
android:id="@+id/bubbleSeekBar"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:bsb_auto_adjust_section_mark="true"
app:bsb_hide_bubble="true"
app:bsb_min="2"
app:bsb_section_count="5"
app:bsb_section_text_position="below_section_mark"
app:bsb_seek_by_section="true" />
第 3 步 - 因为我需要自定义选项,所以我使用 string.xml
上声明的值数组在 onCreate 上进行了初始化bubbleSeekBar.setCustomSectionTextArray { sectionCount, array ->
array.clear()
for ((index, value) in resources.getStringArray(R.array.xxxx)
.withIndex()) {
array.put(index, value)
}
array
}
第 4 步 - 您可以使用以下方法捕获更改或设置值。
bubbleSeekBar.onProgressChangedListener
bubbleSeekBar.setProgress()
这个库非常好,对我有用。有关详细信息,请查看此答案顶部的 link。