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