【问题标题】:Fade in Animation plays twiceFade in Animation 播放两次
【发布时间】:2018-09-19 05:47:47
【问题描述】:

我启用按钮的可见性(从GONEVISIBLE),并在用户键入EditText 时为其 alpha 值设置动画:

private void ShowSendButton()
    {
        if (sendbtn.Visibility != ViewStates.Visible)
        {
            sendbtn.Visibility = ViewStates.Visible;
            sendbtn.Animate().Alpha(1.0f);
        }

    }

只要EditText 为空,按钮就会淡出,其可见性设置为GONE,如下所示:

private void HideSendButton()
        {
            if (sendbtn.Visibility != ViewStates.Gone)
            {
                sendbtn.Animate().Alpha(0.0f).SetDuration(150).Start();
                sendbtn.Visibility = ViewStates.Gone;
            }
        }

ShowSendButton 动画总是播放两次,即在动画结束后,按钮的 alpha 值重置回 0.0 并再次播放淡入淡出动画。

HideSendButton 动画中不会发生这种情况。

这是触发动画的代码:

editText.TextChanged += (s, e) =>
            {
                if (e.AfterCount != 0)
                {
                    ShowSendButton();
                }
                else
                {
                    HideSendButton();
                }

            };

这是按钮 XML:

<Button
            android:id="@+id/sendbtn"
            android:layout_width="40dp"
            android:layout_height="40dp
            android:textColor="#fff"
            android:visibility="gone"
            android:alpha="0"/>

【问题讨论】:

  • 您是否尝试过先制作动画然后制作可见?在 ShowSendButton 中?
  • 将 alpha 置于可见性之上,然后设置为可见。
  • @Greg 遗憾的是,这没有用。按钮立即出现,大约 0.2 秒后动画播放一次。
  • @Greg 我使用的是 xamarin.android,而不是 WPF。
  • @NicodeOry 抱歉,误读了您的标签。

标签: c# android xamarin.android


【解决方案1】:

似乎通过将我的 ShowSendButton 代码更改为部分修复

private void ShowSendButton()
    {
        if (sendbtn.Visibility != ViewStates.Visible)
        {
            sendbtn.Visibility = ViewStates.Visible;
            sendbtn.ClearAnimation();
            Animation fadeIn = new AlphaAnimation(0, 1);
            fadeIn.Duration = 50;
            sendbtn.Animation = fadeIn;

        }

    }

工作正常,但我似乎无法更改动画持续时间(fadeIn.Duration = 50 不起作用)。无论我设置什么值,它总是以大约 0.2 秒的速度播放。

【讨论】:

  • 尝试更大的数字,例如 500。
  • @apineda 对不起,我应该澄清一下。动画的运行速度比我想要的慢(大约 0.2 秒)。如果我改变持续时间,什么都不会发生..
【解决方案2】:

试试这些:

private void ShowSendButton()
{
    if (sendbtn.Visibility != ViewStates.Visible)
    {
        sendbtn.ClearAnimation();
        sendbtn.Animate().Alpha(1.0f).SetDuration(200).WithStartAction(new Runnable(() => {
            sendbtn.Visibility = ViewStates.Visible;
        })).Start();
    }
}

private void HideSendButton()
{
    if (sendbtn.Visibility != ViewStates.Gone)
    {
        sendbtn.ClearAnimation();
        sendbtn.Animate().Alpha(0.0f).SetDuration(200).WithEndAction(new Runnable(() =>
        {
            sendbtn.Visibility = ViewStates.Gone;
        })).Start();
    }
}

在设备上进行了测试,似乎运行良好。

希望对你有帮助。-

【讨论】:

  • 隐藏动画显示了一些伪影(看起来像是播放了两次,但很难分辨)。节目动画立即出现,大约 0.1-0.2 秒后播放动画。
  • 请问你,你用的是模拟器还是真机?模拟器上的动画可能无法正确显示,因此使用真实设备很方便。
  • 我都在使用。我仔细看了看,动画播放了两次(隐藏和显示一次)。我很困惑为什么我的方法有效而你的方法无效。
  • 如果你放了一个断点...会不会是方​​法被调用了两次?
  • 听起来很奇怪,这两种方法都只调用一次。
猜你喜欢
  • 1970-01-01
  • 2021-07-30
  • 2017-03-27
  • 2012-03-15
  • 2012-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多