我正在尝试使用与Gmail应用完全相同的片段来编写带有工具栏导航的应用:您有一个抽屉切换显示为“汉堡包”按钮,当您点击邮件时,汉堡包会转换到后退按钮,反之亦然。
截至目前,我已经能够实现非常接近我想要的东西,除了从汉堡到后箭头没有“动画”的切换按钮。
我所做的是在mainActivity中绑定BackStack的监听器:
SupportFragmentManager.AddOnBackStackChangedListener(this);
然后从Fragment A,我可以加载片段B将其添加到Back Stack:
ResultFragment fragment = new ResultFragment();
this.Activity.SupportFragmentManager.BeginTransaction()
.Replace(Resource.Id.main_fragment, fragment)
.AddToBackStack("results")
.Commit();
在主活动中,监听器检查Backstack,如果不为空,则将汉堡包切换到后退按钮:
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;
}
drawerToggle.ToolbarNavigationClickListener更改后退按钮的行为以调用后退按钮按下事件,如:
Activity.OnBackPressed();
仅此而已。
据我所知,通过这样做,汉堡包被隐藏,后面的按钮被显示出来,反之亦然,所以我确信这就是我看不到动画的原因。
我错过了什么?谢谢你的帮助。
P.S。代码是用C#编写的,因为我使用的是Xamarin.Android,但Java代码和/或Android Native Code被广泛接受为建议。
答案 0 :(得分:0)
按下后退按钮可以添加动画,如下所示:
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);
}
}