android - 如何格式化 android-range-seek-bar 的最小值和最大值?

标签 android

我在 https://github.com/anothem/android-range-seek-bar 使用控件 android-range-seek-bar显示两个拇指控件,允许选择一个范围。

我希望指示栏上所选最小值和最大值的文本格式为“hh:mm:ss”,我创建了一个函数 ConvertSecondsToHMmSs , 我怎样才能做到这一点?如1000L显示“00:00:01”

此外,我希望在最小值或最大值发生变化时做一些事情,但只有事件 public void onRangeSeekBarValuesChanged(RangeSeekBar<?> bar, Long minValue, Long maxValue) ,它无法区分更改了哪个值,最小值或最大值。我希望当最小值改变时做A,当最大值改变时做B!

代码

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RangeSeekBar<Long> seekBar = (RangeSeekBar<Long>) findViewById(R.id.myRangeSeekBar);
        seekBar.setRangeValues(1000L,2000L);
}


private String ConvertSecondsToHMmSs(long millis) {
        return String.format("%02d:%02d:%02d",
                TimeUnit.MILLISECONDS.toHours(millis),
                TimeUnit.MILLISECONDS.toMinutes(millis) -
                        TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
                TimeUnit.MILLISECONDS.toSeconds(millis) -
                        TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
}

布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:rsb="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

    <TextView android:text="@string/hello_world" android:layout_width="wrap_content"
        android:layout_height="wrap_content" />


    <org.florescu.android.rangeseekbar.RangeSeekBar
        android:id="@+id/myRangeSeekBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        rsb:absoluteMaxValue="150"
        rsb:absoluteMinValue="20"/>

</RelativeLayout>

build.gradle

apply plugin: 'com.android.application'
android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.example.cuiwei.myapplication"
        minSdkVersion 21
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'org.florescu.android.rangeseekbar:rangeseekbar-library:0.3.0'

}

最佳答案

这很简单,尽管您需要修改原始的 RangeSeekBar:

enter image description here

1.

  • RangeSeekBar 类复制到您的项目中

  • 将您的 convertSecondsToHMmSs 添加到您的自定义 RangeSeekBar 类中

  • RangeSeekBaronDraw方法中:

    替换(第 646-647 行)

        String minText = String.valueOf(getSelectedMinValue());
        String maxText = String.valueOf(getSelectedMaxValue());
    

        String minText;
        String maxText;
        if (getSelectedMinValue() instanceof Long && getSelectedMaxValue() instanceof Long) {
            minText = String.valueOf(convertSecondsToHMmSs((Long)getSelectedMinValue()));
            maxText = String.valueOf(convertSecondsToHMmSs((Long)getSelectedMaxValue()));
        } else {
            minText = String.valueOf(getSelectedMinValue());
            maxText = String.valueOf(getSelectedMaxValue());
        }
    

    (当然,这可以推广到更广泛的用途!)

2。 要区分最小/最大边界变化 - 只需存储以前的值并比较它们:

    Long currentMin = 1000L, currentMax = 2000L;

    ......

    RangeSeekBar rangeSeekBar = (RangeSeekBar)findViewById(R.id.myRangeSeekBar);
    rangeSeekBar.setRangeValues(currentMin, currentMax);
    rangeSeekBar.setOnRangeSeekBarChangeListener(new RangeSeekBar.OnRangeSeekBarChangeListener() {
        @Override
        public void onRangeSeekBarValuesChanged(RangeSeekBar bar, Object minValue, Object maxValue) {
            if (!currentMin.equals(minValue)) {
                Toast.makeText(MainActivity.this, "Min border changed", Toast.LENGTH_SHORT).show();
            }

            if (!currentMax.equals(maxValue)) {
                Toast.makeText(MainActivity.this, "Max border changed", Toast.LENGTH_SHORT).show();
            }

            currentMin = (Long)minValue;
            currentMax = (Long)maxValue;
        }
    });

关于android - 如何格式化 android-range-seek-bar 的最小值和最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34260789/

相关文章:

android - Crashlytics - 如何添加自定义键 - Eclipse

Android AWS S3 访问被拒绝

Java 中 TextView 的 Android layout_gravity

机器人 : Get or create unique id for each device

android - 无法使用 Holoeverywhere 中的 ActionBarCompat 将 ActionView 添加到操作栏

android - 使用 AlarmManager 执行重复性任务

android - com.google.android.c2dm.intent.RECEIVE 还在使用吗?

java - Firebase android Task<T> 成功后不返回任何内容

java - 如何在Java/Android中访问AsyncTask中的不同URL

android - GL_COLOR_MATERIAL 在 Android 上带有照明