Android 带片段导航的抽屉切换按钮转换

Android 带片段导航的抽屉切换按钮转换,android,android-fragments,xamarin,xamarin.android,material-design,Android,Android Fragments,Xamarin,Xamarin.android,Material Design,我正在尝试编写一个带有工具栏导航的应用程序,使用的片段与Gmail应用程序完全相同:你有一个抽屉开关,显示为“汉堡”按钮,当你点击邮件时,汉堡会切换到后退按钮,反之亦然 到目前为止,我已经能够实现非常接近我想要的东西,除了切换按钮,它不是“动画”从汉堡到返回箭头 我所做的是为main活动中的backbackback绑定一个侦听器: SupportFragmentManager.AddOnBackStackChangedListener(this); 然后从片段A加载片段B并将其添加到后堆栈:

我正在尝试编写一个带有工具栏导航的应用程序,使用的片段与Gmail应用程序完全相同:你有一个抽屉开关,显示为“汉堡”按钮,当你点击邮件时,汉堡会切换到后退按钮,反之亦然

到目前为止,我已经能够实现非常接近我想要的东西,除了切换按钮,它不是“动画”从汉堡到返回箭头

我所做的是为main活动中的backbackback绑定一个侦听器:

SupportFragmentManager.AddOnBackStackChangedListener(this);
然后从片段A加载片段B并将其添加到后堆栈:

ResultFragment fragment = new ResultFragment();
this.Activity.SupportFragmentManager.BeginTransaction()
   .Replace(Resource.Id.main_fragment, fragment)
   .AddToBackStack("results")
   .Commit();
在主活动中,侦听器检查backbackback,如果backbackback不是空的,则将汉堡切换到backback按钮:

bool canGoBack = SupportFragmentManager.BackStackEntryCount > 0;
if (canGoBack)
{
      //Showing Back Button
      if (!_toolbarNavigationListererSet)
      {
         drawerToggle.DrawerIndicatorEnabled = false;
         SupportActionBar.SetDisplayHomeAsUpEnabled(true);

         BackHandler backHandler = new BackHandler(this);
         drawerToggle.ToolbarNavigationClickListener = backHandler;
         _toolbarNavigationListererSet = true;
      }

}
else
{
       //Show the hamburger
       SupportActionBar.SetDisplayHomeAsUpEnabled(false);
       drawerToggle.DrawerIndicatorEnabled = true;

       drawerToggle.ToolbarNavigationClickListener = null;
       _toolbarNavigationListererSet = false;
 }
DroperToggle.ToolbarNavigationClickListener更改后退按钮的行为以调用后退按钮按下事件,如:

Activity.OnBackPressed();
没别的了

我知道这样做,汉堡被隐藏,后退按钮被显示,反之亦然,所以我确信这就是我看不到动画的原因

我错过了什么?谢谢你的帮助


另外,代码是用C#编写的,因为我使用的是Xamarin.Android,但Java代码和/或Android本机代码是一个很好的建议。

您可以在按下后退按钮时添加动画,如下所示:

ValueAnimator anim = ValueAnimator.OfFloat(0f, 1.0f);
anim.AddUpdateListener(new AnimatorUpdateListener(this));
anim.SetInterpolator(new DecelerateInterpolator());
anim.SetDuration(500);
anim.Start();

public class AnimatorUpdateListener : Java.Lang.Object, ValueAnimator.IAnimatorUpdateListener
{
     private MainActivity mContext;

     public AnimatorUpdateListener(MainActivity context)
     {
         mContext = context;
     }

     public void OnAnimationUpdate(ValueAnimator valueAnimator)
     {
         var slideOffset = (System.Single)valueAnimator.AnimatedValue;
         mContext.drawerToggle.OnDrawerSlide(mContext.drawerLayout, slideOffset);
     }
}

谢谢从后退按钮到汉堡(必须从卸载(0f,1.0f)更改为卸载(1.0f,0f))这一功能很好,但从汉堡到后退按钮不起作用。更准确地说,仅当I
awayt Task.Delay(500)
在设置
drawerToggle.DrawerIndicatorEnabled=false之前有效