📅  最后修改于: 2023-12-03 15:24:26.865000             🧑  作者: Mango
范围滑块是一种常见的UI控件,它允许用户拖动滑块以选择范围。在Android中,您可以使用SeekBar和RangeSeekBar两种方式来实现范围滑块。
SeekBar是一个移动滑块的滑块条,可以用于选择数字范围。要在SeekBar上实现范围滑块,您需要创建两个SeekBar并处理它们的进度条滑块值。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<SeekBar
android:id="@+id/seekBar1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<SeekBar
android:id="@+id/seekBar2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
SeekBar seekBar1 = (SeekBar) findViewById(R.id.seekBar1);
SeekBar seekBar2 = (SeekBar) findViewById(R.id.seekBar2);
seekBar1.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
int progressChanged = 0;
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser){
progressChanged = progress;
}
public void onStartTrackingTouch(SeekBar seekBar) {
// Do something here, if necessary.
}
public void onStopTrackingTouch(SeekBar seekBar) {
// Do something here, if necessary.
}
});
seekBar2.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
int progressChanged = 0;
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser){
progressChanged = progress;
}
public void onStartTrackingTouch(SeekBar seekBar) {
// Do something here, if necessary.
}
public void onStopTrackingTouch(SeekBar seekBar) {
// Do something here, if necessary.
}
});
以上代码中,我们创建了两个SeekBar的监听器,每个监听器处理一个SeekBar的滑块值。您可以使用onProgressChanged()方法来处理SeekBar的变化,例如将滑块值设置为TextView中的文本或更新图形等。
RangeSeekBar是一种可滑动范围选择器的开源控件,您可以使用它来实现更复杂的范围滑块。您可以在GitHub上找到它的源代码,并在Android Studio中添加它。
dependencies {
implementation 'com.jaygoo.widget:rangeseekbar:2.1.0'
}
<com.jaygoo.widget.RangeSeekBar
android:id="@+id/rangeSeekBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
jaygoo:rsb_mode="range"
jaygoo:rsb_tick_mark_mode="equal"
jaygoo:rsb_tick_num="5"
jaygoo:rsb_left_seek_bar_color="#c1c1c1"
jaygoo:rsb_left_seek_bar_color_touch="#444444"
jaygoo:rsb_right_seek_bar_color="#c1c1c1"
jaygoo:rsb_right_seek_bar_color_touch="#444444"
jaygoo:rsb_tick_mark_text_margin="8dp"
jaygoo:rsb_tick_mark_text_size="12sp"
jaygoo:rsb_tick_title_text_size="16sp"
jaygoo:rsb_radius="6dp"
jaygoo:rsb_bar_height="4dp"
jaygoo:rsb_bar_range_padding="0dp"
jaygoo:rsb_connecting_line_type="Triangle"
jaygoo:rsb_connecting_line_color="#888888"
jaygoo:rsb_extra="1dp"
jaygoo:rsb_line_radius="2dp"
jaygoo:rsb_line_height="1dp"
jaygoo:rsb_thumbRadio="12dp"
jaygoo:rsb_thumbTouchRadio="16dp" />
RangeSeekBar rangeSeekBar = (RangeSeekBar) findViewById(R.id.rangeSeekBar);
rangeSeekBar.setValue(10f, 80f);
rangeSeekBar.setOnRangeChangedListener(new OnRangeChangedListener() {
@Override
public void onRangeChanged(RangeSeekBar view, float leftValue, float rightValue, boolean fromUser) {
// Do something here, if necessary.
}
@Override
public void onStartTrackingTouch(RangeSeekBar view, boolean isLeft) {
// Do something here, if necessary.
}
@Override
public void onStopTrackingTouch(RangeSeekBar view, boolean isLeft) {
// Do something here, if necessary.
}
});
以上代码中,我们将RangeSeekBar的左右值设置为10到80。您可以使用setValue()方法来设置初始值。我们还添加了一个OnRangeChangedListener,它处理范围滑块的变化。您可以从onRangeChanged()方法中获取左和右范围的滑块值,并在必要时更新图形等。
以上就是在Android中添加范围滑块的两种方法。您可以根据需要选择其中一种实现。