ValueAnimator очень медленный на устройствах низкого уровня - PullRequest
0 голосов
/ 30 октября 2019

Пожалуйста, не отмечайте его как дубликат, ни один из ответов не помог мне, поэтому отправка нового вопроса

Я использую ValueAnimator для

Вход в анимацию

  1. Cardview: измените левое и правое поле с 12dp на 0dp, чтобы ширина соответствовала родительскому

  2. tablayout: измените высоту 40dp на 0dp

Выходная анимация Реверс входной анимации

Эти анимации хороши в высокопроизводительных устройствах, таких как OnePlus 7, Moto и т. Д., Но в бюджетных устройствах этоочень лаги

мой код

/**************    Animating Tab Height to 0 size  **************/
            tabLayoutHeightAnim = ValueAnimator.ofInt(tabLayout.measuredHeight, 0)
            tabLayoutHeightAnim?.addUpdateListener {

                var height = it.animatedValue
                val layoutParams = tabLayout.layoutParams as ViewGroup.LayoutParams
                layoutParams.height = height as Int
                tabLayout.layoutParams = layoutParams
                tabLayout.invalidate()
                tabLayout.requestLayout()
            }
            tabLayoutHeightAnim?.duration = duration
            tabLayoutHeightAnim?.interpolator = AccelerateDecelerateInterpolator()
            tabLayoutHeightAnim?.start()


            /**************    Animating Searchview margin from 12dp  to 0 dp  **************/
            val layoutParams = cvSearch.layoutParams as ConstraintLayout.LayoutParams
            searchViewWidthAnim = ValueAnimator.ofInt(layoutParams.leftMargin, 0)
            searchViewWidthAnim?.addUpdateListener {

                var zeroMargin = it.animatedValue

                layoutParams.leftMargin = zeroMargin as Int
                layoutParams.rightMargin = zeroMargin
                cvSearch.cardElevation = resourceFinder.getDimension(R.dimen.view_0dp).toFloat()
                changeStatusbarColor(resourceFinder.getColour(R.color.white))
                cvSearch.layoutParams = layoutParams

                cvSearch.invalidate()
                cvSearch.requestLayout()
            }
            searchViewWidthAnim?.duration = duration
            searchViewWidthAnim?.interpolator = AccelerateDecelerateInterpolator()
            searchViewWidthAnim?.start()

enter image description here

...