Вид мигает после анимации - PullRequest
0 голосов
/ 08 ноября 2019

У меня проблема с любым типом анимации. Я хочу сделать материал баннерного поведения, но с другими анимациями. На самом деле я получил результат, но проблема в том, что после анимации вид мигает. Мой код:

Первый пример:

val anim = TranslateAnimation(1f, 1f, 1f, 0f)
anim.duration = 300
banner.startAnimation(anim)
banner.visibility = View.INVISIBLE

Второй пример

val mTransition = Slide(Gravity.END)
mTransition.setDuration(300)
mTransition.addTarget(banner)

TransitionManager.beginDelayedTransition(banner, mTransition)
banner.setVisibility(View.GONE)

Может кто-нибудь объяснить, как избежатьмигание view и почему это происходит.

Ответы [ 2 ]

1 голос
/ 08 ноября 2019

Проблема в коде banner.visibility = View.INVISIBLE и banner.setVisibility(View.GONE). Попробуйте удалить его.

Если хотите, чтобы banner пропало после окончания анимации. Попробуйте добавить слушателя на анимацию и скрыть banner после завершения анимации:

        val anim = TranslateAnimation(1f, 1f, 1f, 0f)
        anim.duration = 300
        anim.setAnimationListener(object : Animation.AnimationListener {
            override fun onAnimationRepeat(animation: Animation?) {

            }

            override fun onAnimationEnd(animation: Animation?) {
                // banner.visibility = View.INVISIBLE
                // or
                // banner.setVisibility(View.GONE)
            }

            override fun onAnimationStart(animation: Animation?) {
            }

        })
0 голосов
/ 12 ноября 2019

Я решил проблему мерцания вида, анимировав его по-другому. Я использовал следующую стратегию. Прежде всего, я использовал Guideline компонент ConstraintLayout. Я ограничиваю свой баннер верхней частью и помещаю параметр layout_constraintGuide_begin = "0dp". После этого я использовал ValueAnimator, чтобы получить анимированное значение для моего Guideline и изменил его параметры guidebegin (см. Код).

        val params: ConstraintLayout.LayoutParams = guideline2.layoutParams as ConstraintLayout.LayoutParams

        animBanner = ValueAnimator.ofInt(0, banner.height + toolbar.height)

        animBanner!!.addUpdateListener {
            params.guideBegin = it.getAnimatedValue() as Int
            guideline2.layoutParams = params
        } 

Это объявление анимации. В конце достаточно использовать animBanner.start() для запуска анимации и animBanner.reverse() для обратной анимации (скрытие баннера).

...