コード例 #1
0
 protected virtual void OnBeforeFragmentChanging(FragmentTransaction ft, Fragment fragment, MvxFragmentPresentationAttribute attribute)
 {
     if (attribute.SharedElements != null)
     {
         foreach (var item in attribute.SharedElements)
         {
             string name = item.Key;
             if (string.IsNullOrEmpty(name))
             {
                 name = ViewCompat.GetTransitionName(item.Value);
             }
             ft.AddSharedElement(item.Value, name);
         }
     }
     if (!attribute.EnterAnimation.Equals(int.MinValue) && !attribute.ExitAnimation.Equals(int.MinValue))
     {
         if (!attribute.PopEnterAnimation.Equals(int.MinValue) && !attribute.PopExitAnimation.Equals(int.MinValue))
         {
             ft.SetCustomAnimations(attribute.EnterAnimation, attribute.ExitAnimation, attribute.PopEnterAnimation, attribute.PopExitAnimation);
         }
         else
         {
             ft.SetCustomAnimations(attribute.EnterAnimation, attribute.ExitAnimation);
         }
     }
     if (attribute.TransitionStyle != int.MinValue)
     {
         ft.SetTransitionStyle(attribute.TransitionStyle);
     }
 }
コード例 #2
0
        protected virtual void OnBeforeFragmentChanging(FragmentTransaction ft, MvxFragmentPresentationAttribute attribute)
        {
            if (attribute.SharedElements != null)
            {
                foreach (var item in attribute.SharedElements)
                {
                    ft.AddSharedElement(item.Value, item.Key);
                }
            }

            if (!attribute.EnterAnimation.Equals(int.MinValue) && !attribute.ExitAnimation.Equals(int.MinValue))
            {
                if (!attribute.PopEnterAnimation.Equals(int.MinValue) && !attribute.PopExitAnimation.Equals(int.MinValue))
                {
                    ft.SetCustomAnimations(attribute.EnterAnimation, attribute.ExitAnimation, attribute.PopEnterAnimation, attribute.PopExitAnimation);
                }
                else
                {
                    ft.SetCustomAnimations(attribute.EnterAnimation, attribute.ExitAnimation);
                }
            }

            if (attribute.TransitionStyle != int.MinValue)
            {
                ft.SetTransitionStyle(attribute.TransitionStyle);
            }
        }
コード例 #3
0
        protected virtual void OnBeforeFragmentChanging(FragmentTransaction ft, Fragment fragment, MvxFragmentPresentationAttribute attribute, MvxViewModelRequest request)
        {
            if (CurrentActivity is IMvxAndroidSharedElements sharedElementsActivity)
            {
                var elements = new List <string>();

                foreach (KeyValuePair <string, View> item in sharedElementsActivity.FetchSharedElementsToAnimate(attribute, request))
                {
                    var transitionName = item.Value.GetTransitionNameSupport();
                    if (!string.IsNullOrEmpty(transitionName))
                    {
                        ft.AddSharedElement(item.Value, transitionName);
                        elements.Add($"{item.Key}:{transitionName}");
                    }
                    else
                    {
                        MvxLog.Instance.Warn("A XML transitionName is required in order to transition a control when navigating.");
                    }
                }

                if (elements.Count > 0)
                {
                    fragment.Arguments.PutString(SharedElementsBundleKey, string.Join("|", elements));
                }
            }

            if (!attribute.EnterAnimation.Equals(int.MinValue) && !attribute.ExitAnimation.Equals(int.MinValue))
            {
                if (!attribute.PopEnterAnimation.Equals(int.MinValue) && !attribute.PopExitAnimation.Equals(int.MinValue))
                {
                    ft.SetCustomAnimations(attribute.EnterAnimation, attribute.ExitAnimation, attribute.PopEnterAnimation, attribute.PopExitAnimation);
                }
                else
                {
                    ft.SetCustomAnimations(attribute.EnterAnimation, attribute.ExitAnimation);
                }
            }

            if (attribute.TransitionStyle != int.MinValue)
            {
                ft.SetTransitionStyle(attribute.TransitionStyle);
            }
        }
コード例 #4
0
        protected virtual void SetAnimationsOnTransaction(FragmentTransaction fragmentTransaction,
                                                          MvxFragmentPresentationAttribute attribute)
        {
            if (fragmentTransaction == null)
            {
                return;
            }

            if (attribute == null)
            {
                return;
            }

            if (attribute.EnterAnimation != int.MinValue &&
                attribute.ExitAnimation != int.MinValue)
            {
                if (attribute.PopEnterAnimation != int.MinValue &&
                    attribute.PopExitAnimation != int.MinValue)
                {
                    fragmentTransaction.SetCustomAnimations(
                        attribute.EnterAnimation,
                        attribute.ExitAnimation,
                        attribute.PopEnterAnimation,
                        attribute.PopExitAnimation);
                }
                else
                {
                    fragmentTransaction.SetCustomAnimations(
                        attribute.EnterAnimation,
                        attribute.ExitAnimation);
                }
            }

            if (attribute.TransitionStyle != int.MinValue)
            {
                fragmentTransaction.SetTransitionStyle(attribute.TransitionStyle);
            }
        }
コード例 #5
0
        protected virtual void PopFragment(FragmentManager fragmentManager, FragmentTransaction fragmentTransaction, MvxFragmentPresentationAttribute fragmentAttribute, string fragmentName, bool removeIsNeeded = false, bool forward = false)
        {
            fragmentAttribute = fragmentAttribute ?? DeqeueFragmentAttributeIfExist(fragmentName);

            if (fragmentAttribute != null)
            {
                if (!fragmentAttribute.EnterAnimation.Equals(int.MinValue) && !fragmentAttribute.ExitAnimation.Equals(int.MinValue))
                {
                    if (!fragmentAttribute.PopEnterAnimation.Equals(int.MinValue) && !fragmentAttribute.PopExitAnimation.Equals(int.MinValue))
                    {
                        fragmentTransaction.SetCustomAnimations(fragmentAttribute.EnterAnimation, fragmentAttribute.ExitAnimation, fragmentAttribute.PopEnterAnimation, fragmentAttribute.PopExitAnimation);
                    }
                    else
                    {
                        fragmentTransaction.SetCustomAnimations(fragmentAttribute.EnterAnimation, fragmentAttribute.ExitAnimation);
                    }
                }

                if (fragmentAttribute.TransitionStyle != int.MinValue)
                {
                    fragmentTransaction.SetTransitionStyle(fragmentAttribute.TransitionStyle);
                }
            }

            if ((FragmentsBackStack.LastOrDefault(x => x.Key == fragmentName)?.ViewModel as IBaseViewModel)?.VmNavigationType == NavigationType.PresentModal)
            {
                lock (this)
                {
                    _presentedModalFragments--;
                }
            }

            var oldFragment = fragmentManager.FindFragmentByTag(fragmentName);

            if (oldFragment != null)
            {
                if (!oldFragment.IsDetached)
                {
                    if (removeIsNeeded)
                    {
                        RemoveFragmentFromBackStack(fragmentName);

                        fragmentTransaction.Remove(oldFragment);
                    }
                    else
                    {
                        fragmentTransaction.Detach(oldFragment);
                    }
                }
                else if (removeIsNeeded)
                {
                    RemoveFragmentFromBackStack(fragmentName);

                    fragmentTransaction.Remove(oldFragment);
                }

                if (!forward)
                {
                    OnFragmentPopped(fragmentTransaction, oldFragment, null);
                }
            }
        }