C# 淡入动画播放两次

C# 淡入动画播放两次,c#,android,xamarin.android,C#,Android,Xamarin.android,每当用户在EditText上键入以下内容时,我将启用按钮的可见性,使其从“GONE”变为“VISIBLE”,并设置其alpha值的动画: 每当EditText为空时,按钮将淡出,其可见性设置为“消失”,如下所示: private void HideSendButton() { if (sendbtn.Visibility != ViewStates.Gone) { sendbtn.Animate().

每当用户在EditText上键入以下内容时,我将启用按钮的可见性,使其从“GONE”变为“VISIBLE”,并设置其alpha值的动画:

每当EditText为空时,按钮将淡出,其可见性设置为“消失”,如下所示:

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代码更改为

工作正常,但我似乎无法更改动画持续时间fadeIn。持续时间=50不起作用。无论我将其设置为什么值,它始终以0.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();
    }
}
在一台设备上进行了测试,结果似乎很好


希望有帮助。-

您是否尝试过先设置动画,然后使其可见?在ShowSendButton中?将alpha置于可见性之上,然后设置为visible。@Greg很遗憾,这不起作用。按钮立即出现,大约0.2秒后动画播放一次。@Greg我使用的是xamarin.android,不是WPF。@Nicodery抱歉,误读了您的标记。请尝试更高的数字,如500。@apineda抱歉,我应该澄清一下。动画的运行速度比我希望的要慢,大约为0.2秒。如果我改变持续时间,什么也不会发生。隐藏动画显示了一些工件,看起来好像播放了两次,但很难说。show动画立即出现,大约在0.1-0.2秒后播放。我问你,你使用的是模拟器还是真实设备?模拟器上的动画可能显示不正确,因此使用真实设备很方便。我两者都在使用。我看得更仔细了,动画播放了两次“隐藏”和“显示”。我不明白为什么我的方法有效而你的方法无效。如果你把一个断点。。。可能是方法被调用了两次吗?听起来很奇怪,两个方法都只被调用了一次。
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;

        }

    }
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();
    }
}