public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { var view = inflater.Inflate(Resource.Layout.fragment_select_game, container, false); root = view.FindViewById <ViewGroup>(Resource.Id.root); var label = view.FindViewById <TextView>(Resource.Id.text); label.Text = GameSet.Name; root.SetBackgroundColor(Android.Graphics.Color.ParseColor(GameSet.Color)); grid = view.FindViewById <SquareGridLayout>(Resource.Id.grid); int gameCount = GameSet.GameCount; var cols = (int)Math.Sqrt(gameCount); var rows = (int)(gameCount / cols); if ((cols * rows) < gameCount) { rows++; } grid.ColumnCount = cols; grid.RowCount = rows; grid.RemoveAllViews(); for (int i = 0; i < GameSet.GameCount; i++) { int row = i / grid.ColumnCount; int col = i % grid.ColumnCount; var gameDefinition = GameSet.Games[i]; var highScore = GameData.Current.GetGameHighScore(gameDefinition); if (string.IsNullOrWhiteSpace(gameDefinition.Name)) { gameDefinition.Name = (i + 1).ToString(); } var squareWidget = new SquareWidget(Context); squareWidget.GameDefinition = gameDefinition; squareWidget.Text = gameDefinition.Name; //squareWidget.IsSelected = false; squareWidget.ShowBackground = highScore == null; var layoutParams = new GridLayout.LayoutParams( GridLayout.InvokeSpec(row, 1f), // Row GridLayout.InvokeSpec(col, 1f)); // Col grid.AddView(squareWidget, layoutParams); squareWidget.Click += SquareView_Click; } return(view); }
void BuildGrid(int startDelay) { if (building) { return; } building = true; undoButton.Visibility = ViewStates.Gone; grid.RemoveAllViews(); grid.ColumnCount = runner.Definition.Width; grid.RowCount = runner.Definition.Height; var cellDelay = 40; var entranceType = RandomManager.Next(3); var duration = 1000; if (runner.Definition.Width <= 5) { duration = 1500; cellDelay = 60; } if (!runner.Definition.GameSet.IsTraining) { Shuffle(colorPalette); } for (int x = 0; x < runner.Definition.Width; x++) { for (int y = 0; y < runner.Definition.Height; y++) { var cell = runner.Grid[x, y]; var cellView = new GameCell(this); cellView.ColorPalette = colorPalette; if (runner.Definition.GameSet.IsTraining) { cellView.Font = FontManager.IconFont; } cellView.ViewModel = cell; cell.View = cellView; cellView.TextSize = textSize; var layoutParams = new GridLayout.LayoutParams( GridLayout.InvokeSpec(y, 1f), // Row GridLayout.InvokeSpec(x, 1f)); // Col grid.AddView(cellView, layoutParams); switch (entranceType) { case 1: // Outside-in { int distanceX = Math.Min(x, runner.Definition.Width - 1 - x); int distanceY = Math.Min(y, runner.Definition.Height - 1 - y); cellView.CreateAnimator <BounceInUpAnimator>() .SetStartDelay(startDelay + ((distanceX + distanceY) * cellDelay)) .SetDuration(duration) .Animate(); } break; case 2: // Inside-out { int distanceX = Math.Max(x, runner.Definition.Width - 1 - x); int distanceY = Math.Max(y, runner.Definition.Height - 1 - y); cellView.CreateAnimator <BounceInUpAnimator>() .SetStartDelay(startDelay + ((distanceX + distanceY) * cellDelay)) .SetDuration(duration) .Animate(); } break; default: // Start Top Left cellView.CreateAnimator <BounceInUpAnimator>() .SetStartDelay(startDelay + ((x + y) * cellDelay)) .SetDuration(duration) .Animate(); break; } } } building = false; }