Android 带片段导航的抽屉切换按钮转换
我正在尝试编写一个带有工具栏导航的应用程序,使用的片段与Gmail应用程序完全相同:你有一个抽屉开关,显示为“汉堡”按钮,当你点击邮件时,汉堡会切换到后退按钮,反之亦然 到目前为止,我已经能够实现非常接近我想要的东西,除了切换按钮,它不是“动画”从汉堡到返回箭头 我所做的是为main活动中的backbackback绑定一个侦听器: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并将其添加到后堆栈:
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之前有效代码>