Android живая ширина на ощупь - PullRequest
0 голосов
/ 21 января 2020

Я хочу анимировать ширину вида с помощью пролистывания ViewPager (масштабировать кнопку на экране). Я использую следующую функцию для анимации ширины:

fun View.animateWidth(targetWidth: Int, duration) {
     val prevWidth = width

     visibility = View.VISIBLE
     val valueAnimator = ValueAnimator.ofInt(prevWidth, targetWidth)
     valueAnimator.addUpdateListener { animation ->
         layoutParams.width = animation.animatedValue as Int
         this@animateWidth.requestLayout()
     }
     valueAnimator.duration = duration
     valueAnimator.start()
}

Я вызываю эту функцию при каждом обновлении, которое я получаю от onPageScrollListener моего ViewPager. Проблема в том, что пользовательский интерфейс не обновляется, пока я не перестану касаться / двигать пальцами или пока я не перейду на следующую страницу экрана. Похоже, что пользовательский интерфейс блокирует мою анимацию, пока я не закончу движение sh. Есть идеи?

Редактировать: Здесь я вызываю функцию animateWidth:

viewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
        override fun onPageScrollStateChanged(state: Int) {}
        override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
            button.animateWidth(
                    (fullWidth * positionOffset).toInt(), 1)
        }
        override fun onPageSelected(position: Int) {  }
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...