Xamarin,通过XML动画:移交变量

时间:2017-11-15 15:03:30

标签: android animation xamarin

我在代码中通过XML获得了一个动画滑块:

    private void MoveSlider()
    {
        if (blNewestSelected)
        {
            var moveIt = AnimationUtils.LoadAnimation(this.BaseContext, 
                Resource.Animation.Profile_MoveSliderToLeft);
            btnItemSelected.StartAnimation(moveIt);
        }
        else if (blMostApSelected)
        {
            var moveIt = AnimationUtils.LoadAnimation(this.BaseContext, 
                Resource.Animation.Profile_MoveSliderToCenter);
            btnItemSelected.StartAnimation(moveIt);
        }
        else if (blMostUpvotedSelected)
        {
            var moveIt = AnimationUtils.LoadAnimation(this.BaseContext, 
                Resource.Animation.Profile_MoveSliderToRight);
            btnItemSelected.StartAnimation(moveIt);
        }

    }

XML看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<set
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:fillAfter="true">
  <translate
    android:fromXDelta="0%p"
    android:toXDelta="62%p"
    android:duration="400" />

</set>

问题是,动画总是从0 x-delta开始。 然而,我需要移交当前delta的varibale,以便 动画从对象当前所在的位置开始,而不是始终从0开始。 我一直无法找到,怎么做。这可能很容易...... 任何帮助都很棒:)

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用实际移动对象的ObjectAnimation。这样可以正常工作,但您需要将应用定位到最低API级别11:

IInterpolator interpolators = AnimationUtils.LoadInterpolator(this, Android.Resource.Interpolator.AccelerateDecelerate);

ObjectAnimator transAnimation = ObjectAnimator.OfFloat(view, propertyName, fromX, toX);
transAnimation.SetDuration(400);
transAnimation.SetInterpolator(interpolators);
transAnimation.Start();

查看 - 这是要应用动画的视图

propertyName - 正在设置动画的属性为“translationX”

FromX,toX - 动画随时间变化的一组值。