【问题标题】:How can I handle view animation in android?如何在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()

我的问题是:

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

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

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

【问题讨论】:

    标签: android android-layout kotlin android-animation


    【解决方案1】:

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

    关于问题:

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

    【讨论】:

    • ViewAnimations 只是一个包含视图动画功能的对象。我用缺少的代码更新了问题,基本上逻辑是 onClick 打开 - 在另一个点击关闭等等,真的不知道逻辑问题在哪里
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    相关资源
    最近更新 更多