📜  如何在Android中添加范围滑块?(1)

📅  最后修改于: 2023-12-03 15:24:26.865000             🧑  作者: Mango

在Android中添加范围滑块

范围滑块是一种常见的UI控件,它允许用户拖动滑块以选择范围。在Android中,您可以使用SeekBar和RangeSeekBar两种方式来实现范围滑块。

使用SeekBar实现范围滑块

SeekBar是一个移动滑块的滑块条,可以用于选择数字范围。要在SeekBar上实现范围滑块,您需要创建两个SeekBar并处理它们的进度条滑块值。

步骤1:在布局文件中添加两个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>
步骤2:在Java代码中处理进度条滑块值
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实现范围滑块

RangeSeekBar是一种可滑动范围选择器的开源控件,您可以使用它来实现更复杂的范围滑块。您可以在GitHub上找到它的源代码,并在Android Studio中添加它。

步骤1:在Gradle文件中添加依赖项
dependencies {
    implementation 'com.jaygoo.widget:rangeseekbar:2.1.0'
}
步骤2:在布局文件中添加RangeSeekBar
<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" />
步骤3:在Java代码中处理滑块值
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中添加范围滑块的两种方法。您可以根据需要选择其中一种实现。