From 47e5d30865be82e79f801feba54fc9d3e09e8897 Mon Sep 17 00:00:00 2001 From: ilmirka Date: Tue, 22 Mar 2022 20:17:34 +0300 Subject: [PATCH] Moved finishing callback to ProgressStepChangeListener; added method "nextTo(position:Int)" for moving some position. --- .../multiprogressbarexample/MainActivity.kt | 7 +++--- .../multiprogressbar/MultiProgressBar.kt | 24 ++++++++++++------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/genius/multiprogressbarexample/MainActivity.kt b/app/src/main/java/com/genius/multiprogressbarexample/MainActivity.kt index d4f8eda..9080f2c 100644 --- a/app/src/main/java/com/genius/multiprogressbarexample/MainActivity.kt +++ b/app/src/main/java/com/genius/multiprogressbarexample/MainActivity.kt @@ -7,7 +7,7 @@ import android.view.View import com.genius.multiprogressbar.MultiProgressBar class MainActivity : AppCompatActivity(R.layout.activity_main), MultiProgressBar.ProgressStepChangeListener, - View.OnClickListener, MultiProgressBar.ProgressFinishListener { + View.OnClickListener { private val progressBar: MultiProgressBar by lazy { findViewById(R.id.mpb_main) } @@ -15,7 +15,6 @@ class MainActivity : AppCompatActivity(R.layout.activity_main), MultiProgressBar super.onCreate(savedInstanceState) progressBar.setListener(this) - progressBar.setFinishListener(this) } override fun onClick(v: View?) { @@ -34,7 +33,7 @@ class MainActivity : AppCompatActivity(R.layout.activity_main), MultiProgressBar Log.d("STEP", "Current step is $newStep") } - override fun onProgressFinished() { - Log.d("PROGRESS", "Progress finished") + override fun onFinished() { + Log.d("FINISH", "We are finished stories") } } diff --git a/multiprogressbar/src/main/java/com/genius/multiprogressbar/MultiProgressBar.kt b/multiprogressbar/src/main/java/com/genius/multiprogressbar/MultiProgressBar.kt index 1505219..5603855 100644 --- a/multiprogressbar/src/main/java/com/genius/multiprogressbar/MultiProgressBar.kt +++ b/multiprogressbar/src/main/java/com/genius/multiprogressbar/MultiProgressBar.kt @@ -38,7 +38,6 @@ class MultiProgressBar @JvmOverloads constructor( private var singleDisplayedTime: Float = 1F private var stepChangeListener: ProgressStepChangeListener? = null - private var finishListener: ProgressFinishListener? = null private var progressPercents: Int private var currentAbsoluteProgress = 0F @@ -284,10 +283,6 @@ class MultiProgressBar @JvmOverloads constructor( this.stepChangeListener = stepChangeListener } - fun setFinishListener(finishListener: ProgressFinishListener?) { - this.finishListener = finishListener - } - fun setProgressStepsCount(progressSteps: Int) { internalSetProgressStepsCount(progressSteps) } @@ -386,6 +381,19 @@ class MultiProgressBar @JvmOverloads constructor( return singleDisplayedTime } + fun nextTo(position: Int) { + if (isProgressIsRunning) { + pause() + currentAbsoluteProgress = position.toFloat().coerceAtMost(countOfProgressSteps.toFloat()) * progressPercents + animatedAbsoluteProgress = currentAbsoluteProgress + start() + } else { + currentAbsoluteProgress = position.toFloat().coerceAtMost(countOfProgressSteps.toFloat()) * progressPercents + animatedAbsoluteProgress = currentAbsoluteProgress + invalidate() + } + } + private fun internalStartProgress() { val maxValue = countOfProgressSteps * progressPercents.toFloat() activeAnimator = ValueAnimator.ofFloat(animatedAbsoluteProgress, maxValue).apply { @@ -403,7 +411,7 @@ class MultiProgressBar @JvmOverloads constructor( } else if (value == maxValue) { currentAbsoluteProgress = maxValue animatedAbsoluteProgress = maxValue - finishListener?.onProgressFinished() + stepChangeListener?.onFinished() true } else false @@ -467,10 +475,8 @@ class MultiProgressBar @JvmOverloads constructor( interface ProgressStepChangeListener { fun onProgressStepChange(newStep: Int) - } - interface ProgressFinishListener { - fun onProgressFinished() + fun onFinished() } private companion object {