private void SetupFlyinAnim() { flyinAnim = new Animator() { OnCompleted = () => { currentIndex = newIndex; drawPrev = imgs.Count > 0 && currentIndex > 0; drawNext = currentIndex < imgs.Count - 1; opacityBrush.Color = Color.FromArgb(0, Color.Black); RecalcImageRect(); } }; flyinAnim.Add(new Step { Interval = 20, // ms TotalStep = step, AnimAction = (stepI) => { // current currentImgRect = currentImgRect.AdjustXF(direction * vCurrentHor); opacityBrush.Color = Color.FromArgb(255 - stepI * opacityStep, Color.Black); // next newImgRect = newImgRect.AdjustSizeFromCenter(vNewHor, vNewVer); Invalidate(); } }); }
private void FlyOut() { // setup to reduce size of new image currentImgRect = ImageDisplayModeHelper.GetImageRect( this.ClientRectangle, new Rectangle(Point.Empty, imgs[currentIndex].Size), DisplayMode.ScaleLossLessCenter); int offsetSizeHor = 40; int offsetSizeVer = (int)(offsetSizeHor * 1f * currentImgRect.Height / currentImgRect.Width); vNewHor = -1f * offsetSizeHor / step; vNewVer = -1f * offsetSizeVer / step; // newImgRect = ImageDisplayModeHelper.GetImageRect( this.ClientRectangle, new Rectangle(Point.Empty, imgs[newIndex].Size), DisplayMode.ScaleLossLessCenter); // setup prev image on the left newImgRect = newImgRect.AdjustXF(-newImgRect.Right); // and move direction is to the right direction = 1; s = (int)(0.5 * (this.Width + newImgRect.Width)); vCurrentHor = s / step; flyoutAnim.Start(); }