Я пытаюсь сделать очень простую анимацию со SkiaSharp в Xamarin. В основном маленькая точка, вращающаяся по кругу. Основной Timer
делает работу, однако я не могу поддерживать постоянную скорость анимации на разных устройствах. Скорость анимации резко меняется в зависимости от размера экрана (например, если я переключаюсь в альбомную ориентацию, анимация примерно вдвое медленнее).
Это мой код:
protected override void OnPaintSurface(SKPaintSurfaceEventArgs e)
{
base.OnPaintSurface(e);
SKSurface surface = e.Surface;
SKCanvas canvas = surface.Canvas;
canvas.Clear();
int width = e.Info.Width;
int height = e.Info.Height;
canvas.Translate(width / 2, height / 2);
canvas.Scale(0.2f, 0.2f);
canvas.Save();
float radiusDot = radius * 8;
canvas.DrawCircle((float)(radiusDot * Math.Sin(degree * (Math.PI / 180))), (float)(radiusDot * Math.Cos(degree * (Math.PI / 180))), 100, blueFillPoint);
canvas.Restore();
canvas.Save();
}
итаймеры:
Device.StartTimer(TimeSpan.FromMilliseconds(5), () =>
{
if (degree == 0) degree = 360;
else degree -= 2;
if (degreeTail == 360) degreeTail = 0;
else degreeTail += 2;
return true;
});
Device.StartTimer(TimeSpan.FromSeconds(1f / 120), () =>
{
this.InvalidateSurface();
return true;
});