private Animation pageEnterAnimation;
private Animation pageLeaveAnimation;
+ private Animation opacityEffectAnimation;
public ViewStack()
: base()
ClippingMode = ClippingModeType.ClipToBoundingBox;
pageEnterAnimation = new Animation();
pageLeaveAnimation = new Animation();
+ opacityEffectAnimation = new Animation();
pageEnterAnimation.Finished += OnPageEntered;
pageLeaveAnimation.Finished += OnPageLeave;
}
FinishAnimations();
RemoveAllDelayedViews();
StartPageLeaveAnimation(Previous, Current);
+ StartShowAnimation(Previous);
AddViewToDelayRemove(Current);
views.Remove(Current);
}
Add(view);
views.Add(view);
StartPageEnterAnimation(Previous, Current);
+ StartHideAnimation(Previous);
}
protected override void Dispose(Tizen.NUI.DisposeTypes type)
{
FinishAnimation(pageLeaveAnimation);
FinishAnimation(pageEnterAnimation);
+ FinishAnimation(opacityEffectAnimation);
}
private void StartPageLeaveAnimation(View back, View front)
TransitionFinished?.Invoke(this, new EventArgs());
}
+ private void StartHideAnimation(View view)
+ {
+ StartOpacityAnimation(view, 1.0f, 0.0f);
+ }
+
+ private void StartShowAnimation(View view)
+ {
+ StartOpacityAnimation(view, 0.0f, 1.0f);
+ }
+
+ private void StartOpacityAnimation(View view, float from, float to)
+ {
+ if (view != null)
+ {
+ opacityEffectAnimation.Duration = ScrollDuration;
+ view.Opacity = from;
+ opacityEffectAnimation.AnimateTo(view, "Opacity", to);
+ opacityEffectAnimation.Play();
+ }
+ }
+
private class ViewStackBaseCustomLayout : LayoutGroup
{
protected override void OnMeasure(MeasureSpecification widthMeasureSpec, MeasureSpecification heightMeasureSpec)
private const int TransitionTime = 750;
private readonly Extents stackMargin = new Extents(48, 48, 48, 48);
private ViewStack stack;
- private Animation dimEffectAnimation;
private Pagination pagination;
public MainView(Window win)
ClippingMode = ClippingModeType.Disabled,
};
- dimEffectAnimation = new Animation(TransitionTime);
-
pagination = new Pagination();
pagination.PositionUsesPivotPoint = true;
pagination.PivotPoint = new Position(0.5f, 1.0f);
public void Push(View view)
{
- FinishDimAnimation();
-
view.HeightResizePolicy = ResizePolicyType.FillToParent;
view.WidthResizePolicy = ResizePolicyType.FillToParent;
- if (stack.Current is View overlayedView)
- {
- StartDimAnimation(overlayedView);
- }
-
pagination.SelectedIndex = pagination.SelectedIndex + 1;
stack.Push(view);
}
public void Pop()
{
- FinishDimAnimation();
- if (stack.Previous is View previous)
- {
- StartUndimAnimation(previous);
- }
-
pagination.SelectedIndex = pagination.SelectedIndex - 1;
stack.Pop();
}
public void Dispose()
{
- dimEffectAnimation.Dispose();
stack.Dispose();
pagination.Dispose();
}
-
- private void StartDimAnimation(View view)
- {
- view.Opacity = 1.0f;
- dimEffectAnimation.AnimateTo(view, "Opacity", 0.0f);
- dimEffectAnimation.Play();
- }
-
- private void StartUndimAnimation(View view)
- {
- view.Opacity = 0.0f;
- dimEffectAnimation.AnimateTo(view, "Opacity", 1.0f);
- dimEffectAnimation.Play();
- }
-
- private void FinishDimAnimation()
- {
- if (dimEffectAnimation.State == Animation.States.Playing)
- {
- dimEffectAnimation.Stop(Animation.EndActions.StopFinal);
- }
-
- dimEffectAnimation.Clear();
- }
}
}