Базовая скорость анимации SkiaSharp разная на разных экранах - PullRequest
1 голос
/ 02 ноября 2019

Я пытаюсь сделать очень простую анимацию со 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;
});
...