public void onFlipped(FlippingView view)
        {
            imageWallView.ShowImage(flippingCol, flippingRow);
            flippingView.Visibility = ViewStates.Invisible;

            if (activityResumed)
            {
                LoadNextThumbnail();

                if (state.Equals(State.VIDEO_BEING_FLIPPED_OUT))
                {
                    state = State.VIDEO_FLIPPED_OUT;
                }
                else if (state.Equals(State.VIDEO_CUED))
                {
                    videoCol = flippingCol;
                    videoRow = flippingRow;
                    playerView.SetX(imageWallView.GetXPosition(flippingCol, flippingRow));
                    playerView.SetY(imageWallView.GetYPosition(flippingCol, flippingRow));
                    imageWallView.HideImage(flippingCol, flippingRow);
                    playerView.Visibility = ViewStates.Visible;
                    player.Play();
                    state = State.VIDEO_PLAYING;
                }
                else if (state.Equals(State.LOADING_THUMBNAILS) && imageWallView.AllImagesLoaded())
                {
                    state = State.VIDEO_FLIPPED_OUT; // trigger flip in of an initial video
                    flippingView.SetFlipDuration(FLIP_DURATION_MILLIS);
                    flipDelayHandler.SendEmptyMessage(0);
                }
            }
        }
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            state = State.UNINITIALIZED;
            ViewGroup      viewFrame              = new FrameLayout(this);
            DisplayMetrics displayMetrics         = Resources.DisplayMetrics;
            int            maxAllowedNumberOfRows = (int)Math.Floor(
                (displayMetrics.HeightPixels / displayMetrics.Density) / PLAYER_VIEW_MINIMUM_HEIGHT_DP);
            int numberOfRows        = Math.Min(maxAllowedNumberOfRows, MAX_NUMBER_OF_ROWS_WANTED);
            int interImagePaddingPx = (int)displayMetrics.Density * INTER_IMAGE_PADDING_DP;
            int imageHeight         = (displayMetrics.HeightPixels / numberOfRows) - interImagePaddingPx;
            int imageWidth          = (int)(imageHeight * THUMBNAIL_ASPECT_RATIO);

            imageWallView = new ImageWallView(this, imageWidth, imageHeight, interImagePaddingPx);
            viewFrame.AddView(imageWallView, ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.MatchParent);

            thumbnailView = new YouTubeThumbnailView(this);
            thumbnailView.Initialize(DeveloperKey.DEVELOPER_KEY, this);

            flippingView = new FlippingView(this, this, imageWidth, imageHeight);
            flippingView.SetFlipDuration(INITIAL_FLIP_DURATION_MILLIS);
            viewFrame.AddView(flippingView, imageWidth, imageHeight);

            playerView            = new FrameLayout(this);
            playerView.Id         = Resource.Id.player_view;
            playerView.Visibility = ViewStates.Invisible;
            viewFrame.AddView(playerView, imageWidth, imageHeight);

            playerFragment = YouTubePlayerFragment.NewInstance();
            playerFragment.Initialize(DeveloperKey.DEVELOPER_KEY, this);
            FragmentManager.BeginTransaction().Add(Resource.Id.player_view, playerFragment).Commit();
            flipDelayHandler = new FlipDelayHandler()
            {
                HandleMessageAction = (msg) =>
                {
                    FlipNext();
                }
            };
            SetContentView(viewFrame);
        }