Skip to content

Commit 41d25c8

Browse files
fixed detection of closest handle (thumb) to use, upon touch.
1 parent 1bec765 commit 41d25c8

File tree

1 file changed

+44
-13
lines changed

1 file changed

+44
-13
lines changed

video_trimmer_library/src/main/java/com/lb/video_trimmer_library/view/RangeSeekBarView.kt

Lines changed: 44 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ import com.lb.video_trimmer_library.interfaces.OnRangeSeekBarListener
3535
import kotlin.math.absoluteValue
3636

3737
@Suppress("LeakingThis")
38-
open class RangeSeekBarView @JvmOverloads constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int = 0) : View(context, attrs, defStyleAttr) {
38+
open class RangeSeekBarView @JvmOverloads constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int = 0) :
39+
View(context, attrs, defStyleAttr) {
3940
enum class ThumbType(val index: kotlin.Int) {
4041
LEFT(0), RIGHT(1)
4142
}
@@ -65,7 +66,8 @@ open class RangeSeekBarView @JvmOverloads constructor(context: Context, attrs: A
6566
shadowPaint.color = initShadowColor()
6667
strokePaint.isAntiAlias = true
6768
strokePaint.style = Paint.Style.STROKE
68-
strokePaint.strokeWidth = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 2f, context.resources.displayMetrics)
69+
strokePaint.strokeWidth =
70+
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 2f, context.resources.displayMetrics)
6971
strokePaint.color = 0xffffffff.toInt()
7072
edgePaint.isAntiAlias = true
7173
edgePaint.color = 0xffffffff.toInt()
@@ -77,10 +79,18 @@ open class RangeSeekBarView @JvmOverloads constructor(context: Context, attrs: A
7779
open fun initThumbTouchExtraMultiplier() = 1.0f
7880

7981
open fun initThumbWidth(context: Context) =
80-
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 27f, context.resources.displayMetrics).toInt().coerceAtLeast(1)
82+
TypedValue.applyDimension(
83+
TypedValue.COMPLEX_UNIT_DIP,
84+
27f,
85+
context.resources.displayMetrics
86+
).toInt().coerceAtLeast(1)
8187

8288
private fun initTimeLineHeight(context: Context) =
83-
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40f, context.resources.displayMetrics).toInt().coerceAtLeast(1)
89+
TypedValue.applyDimension(
90+
TypedValue.COMPLEX_UNIT_DIP,
91+
40f,
92+
context.resources.displayMetrics
93+
).toInt().coerceAtLeast(1)
8494

8595

8696
fun initMaxWidth() {
@@ -126,12 +136,28 @@ open class RangeSeekBarView @JvmOverloads constructor(context: Context, attrs: A
126136
}
127137
}
128138
//draw stroke around selected range
129-
canvas.drawRect((thumbs[ThumbType.LEFT.index].pos + paddingLeft + thumbWidth), 0f, thumbs[ThumbType.RIGHT.index].pos - paddingRight, timeLineHeight.toFloat(), strokePaint)
139+
canvas.drawRect(
140+
(thumbs[ThumbType.LEFT.index].pos + paddingLeft + thumbWidth),
141+
0f,
142+
thumbs[ThumbType.RIGHT.index].pos - paddingRight,
143+
timeLineHeight.toFloat(),
144+
strokePaint
145+
)
130146

131147
//draw edges
132148
val circleRadius = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 6f, context.resources.displayMetrics)
133-
canvas.drawCircle((thumbs[ThumbType.LEFT.index].pos + paddingLeft + thumbWidth), timeLineHeight.toFloat() / 2f, circleRadius, edgePaint)
134-
canvas.drawCircle(thumbs[ThumbType.RIGHT.index].pos - paddingRight, timeLineHeight.toFloat() / 2f, circleRadius, edgePaint)
149+
canvas.drawCircle(
150+
(thumbs[ThumbType.LEFT.index].pos + paddingLeft + thumbWidth),
151+
timeLineHeight.toFloat() / 2f,
152+
circleRadius,
153+
edgePaint
154+
)
155+
canvas.drawCircle(
156+
thumbs[ThumbType.RIGHT.index].pos - paddingRight,
157+
timeLineHeight.toFloat() / 2f,
158+
circleRadius,
159+
edgePaint
160+
)
135161
}
136162

137163
override fun onTouchEvent(ev: MotionEvent): Boolean {
@@ -159,7 +185,8 @@ open class RangeSeekBarView @JvmOverloads constructor(context: Context, attrs: A
159185
}
160186
MotionEvent.ACTION_MOVE -> {
161187
mThumb = thumbs[currentThumb]
162-
mThumb2 = thumbs[if (currentThumb == ThumbType.LEFT.index) ThumbType.RIGHT.index else ThumbType.LEFT.index]
188+
mThumb2 =
189+
thumbs[if (currentThumb == ThumbType.LEFT.index) ThumbType.RIGHT.index else ThumbType.LEFT.index]
163190
// Calculate the distance moved
164191
val dx = coordinate - mThumb.lastTouchX
165192
val newX = mThumb.pos + dx
@@ -270,15 +297,19 @@ open class RangeSeekBarView @JvmOverloads constructor(context: Context, attrs: A
270297
return -1
271298
var closest = -1
272299
var minDistanceFound = Float.MAX_VALUE
300+
val x = xPos - thumbWidth//+ paddingLeft
301+
// Log.d("AppLog", "xPos:$xPos -> x: $x")
273302
for (thumb in thumbs) {
303+
val thumbPos = if (thumb.index == ThumbType.LEFT.index) thumb.pos else thumb.pos - thumbWidth
304+
// Log.d("AppLog", "thumb ${thumb.index} pos: $thumbPos")
274305
// Find thumb closest to x coordinate
275-
val xMin = thumb.pos - thumbWidth * thumbTouchExtraMultiplier
276-
val xMax = thumb.pos + thumbWidth * (1.0f + thumbTouchExtraMultiplier)
277-
if (xPos in xMin..xMax) {
278-
val xMid = (thumb.pos + thumbWidth) / 2
279-
val distance = (xMid - xPos).absoluteValue
306+
val xMin = thumbPos - thumbWidth * thumbTouchExtraMultiplier
307+
val xMax = thumbPos + thumbWidth * thumbTouchExtraMultiplier
308+
if (x in xMin..xMax) {
309+
val distance = (thumbPos - x).absoluteValue
280310
if (distance < minDistanceFound) {
281311
closest = thumb.index
312+
// Log.d("AppLog", "x: $x distance: $distance selectedThumb:$closest")
282313
minDistanceFound = distance
283314
}
284315
}

0 commit comments

Comments
 (0)