public AnimationsSample() { var button = new Button { Text = "Animate", }; var box = new BoxView { WidthRequest = 100, HeightRequest = 100, Color = Color.Red, HorizontalOptions = LayoutOptions.Center, }; var stack = new StackLayout { Padding = 10, Spacing = 10, VerticalOptions = LayoutOptions.FillAndExpand, Children = { button, box } }; this.Content = stack; button.Clicked += async (s, e) => { button.IsEnabled = false; box.Color = Color.Green; var original = box.Bounds; var newPosition = box.Bounds; newPosition.Y = this.Height - box.Height; await box.LayoutTo(newPosition, 2000, Easing.BounceOut); await box.FadeTo(0, 2000); box.Color = Color.Yellow; box.ScaleTo(2, 2000); await box.FadeTo(1, 2000); box.ScaleTo(1, 2000); box.Color = Color.Green; await box.LayoutTo(original, 2000, Easing.Linear); box.Color = Color.Red; button.IsEnabled = true; }; }
public SingleAnimationPage() { // アニメーション用のボックスを生成 var boxView = new BoxView { Color = Color.Blue, }; // アニメーション開始用のボタンを生成 var button = new Button { Text = "Animation", }; // ボタン押し時の挙動 button.Clicked += (sender, e) => { // 画面下までボックスをアニメーションさせる boxView.LayoutTo(new Rectangle(0, boxView.Y + boxView.Height, boxView.Width, boxView.Height)); }; // レイアウト用のグリッドを生成 var grid = new Grid { // 画面縦いっぱいに表示する VerticalOptions = LayoutOptions.FillAndExpand, RowDefinitions = { new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }, new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }, }, }; // グリッドにパーツを設定 grid.Children.Add(button, 0, 0); grid.Children.Add(boxView, 0, 1); // ページのコンテントにグリッドを設定 Content = grid; }
public MultiAnimationPage() { #region アニメーション用のボックスの生成 // 移動値算出用のボックスを生成 var boxViewBackground = new BoxView { Color = Color.Transparent, }; // 全面アニメーション用のボックスを生成 var boxViewFront = new BoxView { Color = Color.Blue, }; // 背面アニメーション用のボックスを生成 var boxViewBack = new BoxView { Color = Color.Red, }; #endregion #region アニメーション制御用のボタン類の設定 // 移動アニメーション制御用のボタンを生成 var buttonMove = new Button { Text = "Animation", }; // ボタン押し時の挙動 buttonMove.Clicked += (sender, e) => { var box = boxViewBackground; // 下降アニメーション用のレクタングル var moveDownRect = new Rectangle(0, box.Y + box.Height, box.Width, box.Height); // 上昇アニメーション用のレクタングル var moveUpRect = new Rectangle(0, box.Y, box.Width, box.Height); if (boxViewFront.Y == boxViewBackground.Y) { // 現在のレイアウトから指定のレイアウトにアニメーションさせる // ここではRectangleのサイズを変更していないので、単なる下方への移動アニメーション boxViewFront.LayoutTo(moveDownRect); } else { // 現在のレイアウトから指定のレイアウトに、指定時間かけてボックスをアニメーションさせる // ここではRectangleのサイズを変更していないので、単なる上方への移動アニメーション boxViewFront.LayoutTo(moveUpRect, 1000); } }; // 拡大縮小アニメ制御用のボタンを生成 var buttonScale = new Button { Text = "Scale", }; // ボタン押し時の挙動 buttonScale.Clicked += (sender, e) => { if (boxViewFront.Scale == 1) { // ボックスのスケールが1だった場合 // 指定秒かけてScaleを0にする boxViewFront.ScaleTo(0, 500); } else { // ボックスのスケールが0だった場合 // 指定秒かけてScaleを1にする boxViewFront.ScaleTo(1, 1000); } }; // 回転アニメ制御用のボタンを生成 var buttonRelRotate = new Button { Text = "RelRotate", }; // ボタン押し時の挙動 buttonRelRotate.Clicked += (sender, e) => { // ボタンが押されるたびにボックスを30度ずつ回転させる boxViewFront.RelRotateTo(30, 500); }; #endregion #region レイアウト関連 // ボタン用のレイアウト var stack = new StackLayout { Children = { buttonMove, buttonScale, buttonRelRotate, }, }; // ページ全体のレイアウト用のグリッドを生成 var grid = new Grid { // 画面縦いっぱいに表示する VerticalOptions = LayoutOptions.FillAndExpand, RowDefinitions = { new RowDefinition { Height = GridLength.Auto }, new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }, }, }; // グリッドにパーツを設定 grid.Children.Add(stack, 0, 0); grid.Children.Add(boxViewBackground, 0, 1); grid.Children.Add(boxViewBack, 0, 1); grid.Children.Add(boxViewFront, 0, 1); // ページのコンテントにグリッドを設定 Content = grid; #endregion }