「Androidは電気羊の夢を見るか」を読みたい管理者のブログ

仕事などでの色々な発見を記事にしてます。不定期更新。

アニメーション再生中にコントロールしたい

アニメーション再生中に再生しているアニメーションのコントロールをしたいと思って色々見てたら見つけましたこんなもの。

ClockController クラス (System.Windows.Media.Animation)

コードがぐっちゃぐちゃなのでシンプルにしてみるよ。

まずxamlから

    <StackPanel>

        <Button Content="Begin" Margin="10" Click="Begin"/>
        <Button Content="Pause" Margin="10" Click="Pause"/>
        <Button Content="Resume" Margin="10" Click="Resume"/>
        <Button Content="SkipToFill" Margin="10" Click="Skip2Fill"/>
        <Button Content="Stop" Margin="10" Click="Stop"/>
        <Button Content="Seek" Margin="10" Click="Button_Click" x:Name="myButton"/>
    </StackPanel>

myButtonと名づけられたボタンにアニメーションを適用してみようと思います。えへんなのです。あ、ちなみにSeekボタンを一番最初に押さないと例外が発生しますよ!!


つづいてコードビハインド。

    public partial class uc1 : UserControl
    {
        ScaleTransform myScaleTransForm;
        AnimationClock myClock;
        public uc1()
        {
            InitializeComponent();
            myScaleTransForm = new ScaleTransform(1, 1);
            myButton.RenderTransform = myScaleTransForm;
        }


        private void Button_Click(object sender, RoutedEventArgs e)
        {
            DoubleAnimation myAnimation = new DoubleAnimation(1, 5, new Duration(TimeSpan.FromSeconds(50)));
            myAnimation.AutoReverse = false;

            myClock = myAnimation.CreateClock();

            myScaleTransForm.ApplyAnimationClock(ScaleTransform.ScaleXProperty, myClock);
            myScaleTransForm.ApplyAnimationClock(ScaleTransform.ScaleYProperty, myClock);
        }

        private void Begin(object sender, RoutedEventArgs e)
        {
            myClock.Controller.Begin();
        }

        private void Pause(object sender, RoutedEventArgs e)
        {
            myClock.Controller.Pause();
        }
        private void Resume(object sender, RoutedEventArgs e)
        {
            myClock.Controller.Resume();
        }
        private void Skip2Fill(object sender, RoutedEventArgs e)
        {
            myClock.Controller.SkipToFill();

        }
        private void Stop(object sender, RoutedEventArgs e)
        {
            myClock.Controller.Stop();
        }
    }

特にこれといって解説が必要なさそうなシンプルなコードになりましたね。
わざとわかりやすいように50秒かけてアニメーション再生するようにしてます。

結果は、実行してみてください。

そんなこんなでした。