Я хочу анимировать ширину вида с помощью пролистывания 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) { }
})