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