如何在android中处理视图动画?

Posted

技术标签:

【中文标题】如何在android中处理视图动画?【英文标题】:How can I handle view animation in android? 【发布时间】:2021-02-16 03:11:41 【问题描述】:

我正在学习android中的动画,我有几个问题-

我认为我的动画基于一些布尔:

mainFab.setOnClickListener 

        isOpen = ViewAnimations.rotate(binding.mainFab, !isOpen)

        if (isOpen) 
            ViewAnimations.apply 
                showMenu(binding.shareFab)
            
         else 
            ViewAnimations.apply 
                hideMenu(binding.shareFab)
            


ViewAnimations 方法:

fun rotateFab(view: View, isFabOpen: Boolean):  Boolean 
    view.animate()
        .rotation(if (isFabOpen) 1440f else 0f)
        .setDuration(2000)
        .setListener(object : AnimatorListenerAdapter() 
            override fun onAnimationEnd(animation: Animator?) 
                super.onAnimationEnd(animation)
                Log.d(TAG, "onAnimationEnd: ")
            
        )
    return isFabOpen


fun showMenu(view: View) 
    view.visibility = View.VISIBLE
    view.alpha = 0f
    view.animate()
        .setDuration(2000)
        .setListener(object : AnimatorListenerAdapter() 
            override fun onAnimationEnd(animation: Animator?) 

                super.onAnimationEnd(animation)
            
        )
        .alpha(1f)
        .start()


fun hideMenu(view: View) 
    view.animate()
        .setDuration(2000)
        .setListener(object : AnimatorListenerAdapter() 
            override fun onAnimationEnd(animation: Animator?) 
                view.visibility = View.GONE
                super.onAnimationEnd(animation)
            
        ).alpha(0f)
        .start()

我的问题是:

    showMenu 函数中,为什么我的动画在没有空侦听器的情况下无法正常工作? 它第一次工作正常,但从第二次开始,它确实为视图设置了动画,但随后将 alpha 设置为 0/视图消失了。

    为什么没有.start(),动画仍然可以工作?是强制使用吗?

    如果我通过调用showMenu 开始动画,然后在中途我调用hideMenu 它只是以非常丑陋的方式隐藏视图,有没有办法以更优雅的方式“反转”动画?

【问题讨论】:

【参考方案1】:

你所有的问题都来自过度工程。对象ViewAnimations在做什么?

关于问题:

    空监听器不会有问题。你的逻辑有问题。 没有.start()动画无法启动。如果动画正在开始,那么您的逻辑中的某个地方又会出现问题。 ViewPropertyAnimator 动画可以完美地从半状态动画到新状态。我建议您从头开始编写动画,以便对您的所有步骤充满信心。

【讨论】:

ViewAnimations 只是一个包含视图动画功能的对象。我用缺少的代码更新了问题,基本上逻辑是 onClick 打开 - 在另一个点击关闭等等,真的不知道逻辑问题在哪里

以上是关于如何在android中处理视图动画?的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中删除底部导航视图的图标动画

如何在android中简单地为视图设置动画

如何在android中制作这样的动画?

如何在 Android 中的另一个视图上为文本设置动画?

工具栏折叠时如何使用动画调整搜索视图宽度 [ANDROID]

在Android中使用导航组件时如何删除默认动画过渡?