/// <summary>
        ///   Builds the AnimatorSet that will create the expanding animation - the user will perceive the thumbnail getting bigger.
        /// </summary>
        /// <param name="expandedView">This is the ImageView that the thumbnail will scale up to.</param>
        /// <param name="startBounds">The visible rectangle of the thumbnail (global coordinates).</param>
        /// <param name="finalBounds">The visible rectangle of the full sized image (global coordinates).</param>
        /// <param name="startScale"></param>
        /// <returns></returns>
        private AnimatorSet BuildExpandingAnimatorSet(ImageView expandedView, Rect startBounds, Rect finalBounds, float startScale)
        {
			// Each expanding animator is unique to the start location - we'll cache the AnimatorSet
			// instance based on the starting location.
			int key = startBounds.GetHashCode ();
            if (_expandingAnimators.ContainsKey(key))
            {
                return _expandingAnimators[key];
            }

            AnimatorSet expandSet = new AnimatorSet();
            expandSet.Play(ObjectAnimator.OfFloat(expandedView, View.X, startBounds.Left, finalBounds.Left))
                     .With(ObjectAnimator.OfFloat(expandedView, View.Y, startBounds.Top, finalBounds.Top))
                     .With(ObjectAnimator.OfFloat(expandedView, "ScaleX", startScale, 1f))
                     .With(ObjectAnimator.OfFloat(expandedView, "ScaleY", startScale, 1f));
            expandSet.SetDuration(_shortAnimationDuration);
            expandSet.SetInterpolator(new DecelerateInterpolator());
            expandSet.AnimationEnd += NullOutCurrentAnimator;
            expandSet.AnimationCancel += NullOutCurrentAnimator;

            _expandingAnimators.Add(key, expandSet);
            return expandSet;
        }