淡入淡出动画播放两次

时间:2018-04-09 18:39:06

标签: c# android xamarin.android

每当用户输入GONE时,我都会启用按钮的可见性(从VISIBLEEditText),并设置其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"/>

2 个答案:

答案 0 :(得分:1)

试试这些:

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

在设备上测试过,似乎进展顺利。

希望它有所帮助.-

答案 1 :(得分:0)

通过将我的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秒左右。