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);
        }
示例#2
0
        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;
        }