动画从错误的位置开始

时间:2019-01-26 17:44:19

标签: android xamarin xamarin.android

我正在触发动画,但是如果我第二次运行它,动画将在结束之前从错误的位置开始。

void btnRefreshAnimation()
    {
        float pointY = btnRefreshTable.GetY();
        btnRefreshTable.Visibility = ViewStates.Visible;
        anim = ObjectAnimator.OfFloat(btnRefreshTable, "y", pointY + 50.0f, pointY);
        anim.SetDuration(2500);
        anim.SetInterpolator(new OvershootInterpolator(5f));
        anim.Start();


    }

这是在Activity destroy上运行的

if (anim != null)
        {
            anim.Cancel();
            anim.Dispose();
            anim = null;
        }

2 个答案:

答案 0 :(得分:0)

请记住,是否曾经在XAML的Xamarin Forms中设置动画(甚至在后面的代码中)。您必须对Attribute进行初始设置,否则该属性也会“弹出”。

答案 1 :(得分:0)

在Y位置不移动时检索一次,创建一次动画,然后重新使用该位置:

void btnRefreshAnimation()
{
    if (anim == null)
    {
        var startingY = button.GetY();
        anim = ObjectAnimator.OfFloat(button, "y", startingY + 50.0f, pointY);
        anim.SetAutoCancel(true);
        anim.SetDuration(2500);
        anim.SetInterpolator(new OvershootInterpolator(5f));
    }
    anim.Start();
}

注意:请确保在布局更改或旋转时重置(Disposenull)动画。