Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Když se změní komponenta v rámci systémů nebo celý uživatelský zážitek, koncoví uživatelé tyto změny často sledují dvěma způsoby: v průběhu času nebo okamžitě. Na platformě Windows je první možnost upřednostňována před druhou – uživatelské prostředí, které se okamžitě mění, často mate a překvapuje koncové uživatele, protože nemohou sledovat, co se děje. Koncový uživatel pak vnímá zážitek jako rušivý a nepřirozený.
Místo toho můžete časem měnit uživatelské rozhraní, aby usnadnilo postup koncovému uživateli, nebo ho upozornilo na změny v zážitku. Na platformě Windows se to provádí pomocí časových animací, označovaných také jako KeyFrameAnimations. KeyFrameAnimations umožňují měnit uživatelské rozhraní v průběhu času a řídit jednotlivé aspekty animace, včetně toho, jak a kdy se spustí, a jak dosáhne koncového stavu. Například animace objektu na novou pozici nad 300 milisekund je příjemnější než okamžité "teleportování" tam. Při použití animací místo okamžitých změn je čistý výsledek příjemnější a působivější.
Typy časových animací
Existují dvě kategorie časových animací, které můžete použít k vytváření krásných uživatelských prostředí ve Windows:
Explicitní animace – jak název označuje, explicitně spustíte animaci, která provede aktualizace. Implicitní animace – tyto animace spustí systém vaším jménem, když je splněna podmínka.
V tomto článku probereme, jak vytvářet a používat explicitní animace založené na čase pomocí KeyFrameAnimations.
U explicitních i implicitních animací založených na čase existují různé typy odpovídající různým typům vlastností CompositionObject, které můžete animovat.
- ColorKeyFrameAnimation
- QuaternionKeyFrameAnimation
- ScalarKeyFrameAnimation
- Vector2KeyFrameAnimation
- Vector3KeyFrameAnimation
- Vector4KeyFrameAnimation
Vytváření časových animací pomocí KeyFrameAnimations
Než popíšeme, jak pomocí KeyFrameAnimations vytvořit explicitní animace založené na čase, pojďme si projít několik konceptů.
- Klíčové rámce – jedná se o jednotlivé "snímky", kterými animace animuje.
- Definováno jako páry klíč a hodnota. Klíč představuje průběh mezi 0 a 1, tedy v jaké části životnosti animace se daný "snímek" nachází. Druhý parametr představuje hodnotu vlastnosti v tuto chvíli.
- Vlastnosti KeyFrameAnimation – možnosti přizpůsobení, které můžete použít pro splnění potřeb uživatelského rozhraní.
- DelayTime – doba před spuštěním animace po zavolání StartAnimation.
- Doba trvání – doba trvání animace.
- IterationBehavior – počet nebo nekonečné opakování chování animace.
- IterationCount – počet konečných časů opakování animace klíčového rámce.
- Počet klíčových snímků – informace o tom, kolik klíčových snímků je v rámci určité animace klíčových snímků.
- StopBehavior – určuje, jak se hodnota vlastnosti animace chová při zavolání StopAnimation.
- Směr – určuje směr animace pro přehrávání.
- Skupina animací – spuštění několika animací najednou
- Často se používá, když chcete animovat více vlastností najednou.
Další informace naleznete v tématu CompositionAnimationGroup.
S ohledem na tyto koncepty si probereme obecný vzorec pro vytvoření KeyFrameAnimation:
- Identifikujte Objekt CompositionObject a jeho odpovídající vlastnost, kterou potřebujete animovat.
- Vytvořte šablonu typu KeyFrameAnimation compositoru, která odpovídá typu vlastnosti, kterou chcete animovat.
- Pomocí šablony animace začněte přidávat klíčové rámce a definovat vlastnosti animace.
- Vyžaduje se aspoň jeden klíčový rámec (100% nebo 1f keyframe).
- Doporučuje se také definovat dobu trvání.
- Jakmile budete připraveni spustit tuto animaci, zavolejte StartAnimation(...) na Objekt CompositionObject, který cílí na vlastnost, kterou chcete animovat. Konkrétně:
visual.StartAnimation("targetProperty", CompositionAnimation animation);visual.StartAnimationGroup(AnimationGroup animationGroup);
- Pokud máte spuštěnou animaci a chcete zastavit animaci nebo skupinu animací, můžete použít tato rozhraní API:
visual.StopAnimation("targetProperty");visual.StopAnimationGroup(AnimationGroup AnimationGroup);
Podívejme se na příklad, abychom viděli, jak tento vzorec funguje v praxi.
Příklad
V tomto příkladu chcete animovat posun vizuálu od <0 0 0 0> do <200 0 0,0> po 1 sekundu. Kromě toho chcete vizuál animovat mezi těmito pozicemi 10krát.
Nejprve začnete identifikací objektu CompositionObject a vlastnosti, kterou chcete animovat. V tomto případě je červený čtverec reprezentován vizuálem Composition s názvem redVisual. Spustíte animaci z tohoto objektu.
Dále, protože chcete animovat Offset vlastnost, musíte vytvořit Vector3KeyFrameAnimation (Offset je typu Vector3). Také definujete odpovídající klíčové rámce pro KeyFrameAnimation.
Vector3KeyFrameAnimation animation = compositor.CreateVector3KeyFrameAnimation();
animation.InsertKeyFrame(1f, new Vector3(200f, 0f, 0f));
Poté definujete vlastnosti KeyFrameAnimation, které popisují dobu trvání spolu s chováním animace mezi dvěma pozicemi (aktuální a <200,0,0>) 10 krát.
animation.Duration = TimeSpan.FromSeconds(2);
animation.Direction = Microsoft.UI.Composition.AnimationDirection.Alternate;
// Run animation for 10 times
animation.IterationCount = 10;
Nakonec, pokud chcete spustit animaci, musíte ji spustit na vlastnosti CompositionObject.
redVisual.StartAnimation("Offset", animation);
Tady je celý kód.
private void AnimateSquare(Compositor compositor, SpriteVisual redVisual)
{
Vector3KeyFrameAnimation animation = compositor.CreateVector3KeyFrameAnimation();
animation.InsertKeyFrame(1f, new Vector3(200f, 0f, 0f));
animation.Duration = TimeSpan.FromSeconds(2);
animation.Direction = Microsoft.UI.Composition.AnimationDirection.Alternate;
// Run animation for 10 times
animation.IterationCount = 10;
redVisual.StartAnimation("Offset", animation);
}
Windows developer