Seekbar обрабатывает сенсорные события в неправильном месте - PullRequest
0 голосов
/ 10 июня 2019

У меня есть пользовательская вертикаль SeekBar, прикрепленная к ScrollView:

class CustomSeekBar : SeekBar {

constructor(context: Context) : super(context) {}

constructor(context: Context, attrs: AttributeSet, defStyle: Int) : super(context, attrs, defStyle) {}

constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {}

override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
    super.onSizeChanged(h, w, oldh, oldw)
}

@Synchronized
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
    super.onMeasure(heightMeasureSpec, widthMeasureSpec)
    setMeasuredDimension(measuredHeight, measuredWidth)
}

override fun onDraw(c: Canvas) {

    c.rotate(90f)
    c.translate(0f,-width.toFloat())

    super.onDraw(c)
}

override fun onTouchEvent(event: MotionEvent): Boolean {

    super.onTouchEvent(event)
    if (!isEnabled) {
        return false
    }

    when (event.action) {
        MotionEvent.ACTION_DOWN, MotionEvent.ACTION_MOVE, MotionEvent.ACTION_UP -> {

            val i = (max - (max * event.y / height)).toInt()
            progress = 100 - i
            onSizeChanged(width, height, 0, 0)
        }

        MotionEvent.ACTION_CANCEL -> {
        }
    }
    return true
}
}

Кажется, что работает функция прокрутки, но SeekBar реагирует только на прикосновения в его нижней половине, и тень большого пальца все еще прогрессирует горизонтально, а не вертикально позади большого пальца. Вот видео этого странного поведения:

https://www.youtube.com/watch?v=1XGPXF28ONg

Я продолжаю возиться со значениями в методах onDraw и onTouchEvent, но не могу найти шаблон. Чего мне не хватает?

...