0

我試圖寫一個應用程序與工具欄導航使用完全像Gmail應用程序的片段:你有一個抽屜切換顯示爲「漢堡」按鈕,當你點擊一個郵件,漢堡包轉換到後退按鈕,反之亦然。抽屜切換按鈕轉換與片段導航

截至目前,我已經能夠實現非常接近我想要的東西,除了切換按鈕不是從漢堡到後退箭頭的「動畫」。

我所做的是在MainActivity監聽器結合爲返回堆棧:

SupportFragmentManager.AddOnBackStackChangedListener(this); 
從片段A

然後,可以裝入B片段將其添加到返回堆棧:

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本機代碼被廣泛接受爲建議。

回答

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); 
    } 
} 
+0

謝謝!這從後臺按鈕到漢堡包(不得不從OfFloat(0f,1.0f)更改爲OfFloat(1.0f,0f)),但不適用於漢堡包和後退按鈕。更確切地說,只有當我在設置'drawerToggle.DrawerIndicatorEnabled = false;'之前'離開Task.Delay(500)'' –