Как использовать аниматор значений в Xamarin.Android?

#c# #xamarin.android

#c# #xamarin.android

Вопрос:

Я пытаюсь использовать аниматор значений в Xamarin.Android для перемещения объекта путем увеличения его координат X и Y. Я сориентировался на документацию Android для Java.

 using Android.Support.V4.View;
using Android.Animation;

namespace PaintApp
{
    class PaintView : View
    {
        
        private Pair ofsetXY = new Pair(0, 0);
        private ValueAnimator animator = new ValueAnimator();
        PropertyValuesHolder propertyX = PropertyValuesHolder.OfInt("PROPERTY_X", 0, 1000);
        PropertyValuesHolder propertyY = PropertyValuesHolder.OfInt("PROPERTY_Y", 0, 1000);


        public void Kick(float dx, float dy, float vx, float vy)
        {
            animator.SetValues(propertyX, propertyY);
            animator.SetDuration(2000);
            animator.AddUpdateListener(new ValueAnimator.IAnimatorUpdateListener()
            {
                public override void OnAnimationUpdate(ValueAnimator animation)
                {
                    ofsetXY.First = (int)animation.GetAnimatedValue("PROPERTY_X");
                    ofsetXY.Second = (int)animation.GetAnimatedValue("PROPERTY_Y");
                    Invalidate();
                }
            });
         animator.start();
        }
}
  

Но я получаю сообщение об ошибке:
Ошибка CS0144 Не удается создать экземпляр абстрактного класса или интерфейса ‘»ValueAnimator.IAnimatorUpdateListener»‘ и что OnAnimationUpdate не является членом PaintView .

Эта ошибка имеет значение для меня, но каков ваш правильный путь?

Ответ №1:

Между Java и C # есть некоторые различия .В вашем случае вы могли бы изменить код следующим образом

 class PaintView : Android.Views.View, IAnimatorUpdateListener
{
    private Pair ofsetXY = new Pair(0, 0);
    private ValueAnimator animator = new ValueAnimator();
    PropertyValuesHolder propertyX = PropertyValuesHolder.OfInt("PROPERTY_X", 0, 1000);
    PropertyValuesHolder propertyY = PropertyValuesHolder.OfInt("PROPERTY_Y", 0, 1000);

    public void Kick(float dx, float dy, float vx, float vy)
    {
        animator.SetValues(propertyX, propertyY);
        animator.SetDuration(2000);
        animator.AddUpdateListener(this);
        animator.start();
    }

    public void OnAnimationUpdate(ValueAnimator animation)
    {
        ofsetXY.First = (int)animation.GetAnimatedValue("PROPERTY_X");
        ofsetXY.Second = (int)animation.GetAnimatedValue("PROPERTY_Y");
  
        Invalidate();
    }
}