如何在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中处理视图动画?的主要内容,如果未能解决你的问题,请参考以下文章