Android SeekBar - how to set increment step

Viewed 53

I want to use SeekBar to pick time. I have startDate and endDate. Difference in time is set as seekbar.max (could be for example 850 minutes(int 850)). And I want to increment this progress by 15 minutes.

How can I setup that? I tried to setup seekbar.incrementProgressBy(15) but its not working, its still incrementing by 1 minute.

What I want to achieve is that if I have 30 minutes as max and I want to move thumb button, it will automatically move to the middle so first increment is basically 15 minutes (progress 50%).

Code:

    maxDurationInMins = (((maxDate.time/1000)-(minDate.time/1000)).toInt())/60
    
    seekBar.progress = 0
    seekBar.max = maxDurationInMins
    seekBar.incrementProgressBy(15)
    seekBar.setOnSeekBarChangeListener(object: SeekBar.OnSeekBarChangeListener{
        override fun onProgressChanged(p0: SeekBar?, progress: Int, p2: Boolean) {
            updateProgressData(progress)
        }
        override fun onStartTrackingTouch(p0: SeekBar?) {}
        override fun onStopTrackingTouch(p0: SeekBar?) {}
    })
2 Answers

Try this

Spent time 15 mins Divided by Max (850) mins then multiply 100. 15/850 = 0.01764705882. 0.01764705882x100 = 1.76470588235

Set the Seekbar parcentage = 1.76470588235

Formula

Time Percentage (%) = ( Spent Time [sec] / Max Time B [sec] ) × 100

As long as your max time is divisable by your increment without remainder, you could just set seekBar.max to the maximum number of increments.

interval = 15
seekBar.max = maxDurationInMins/interval

Whenever you now react on a progress change, multiply it by the interval.

Related