2017-01-26 40 views
3

我已經做了服務器目錄瀏覽應用程序,它會改變Activity本身的內容。我已經新增了一項功能:Navigation Drawer並在Toolbar處理漢堡圖標如下:漢堡箭頭動畫不能正常工作程序

  • 主目錄:
    1. 漢堡圖標爲默認狀態。
    2. 會上點擊漢堡包或在滑動操作的導航抽屜滑動。
    3. 當抽屜滑動時漢堡包的狀態變化或動畫。
    4. 漢堡包的動畫當選擇一個目錄來返回圖標
  • 任何子目錄:
    1. 從以前的動畫,其唯一目的就是去父目錄後退按鈕。
    2. 以滑動手勢滑動導航抽屜。
    3. 的狀態變化或動畫背景圖標當使用手勢滑動抽屜或當它進入此目錄的另一個子目錄時。
    4. 後退箭頭的動畫圖標漢堡包時使用它後面的圖標或onBackPressed回來的主目錄。

我能夠得到漢堡的動畫使用this answer(代碼是逐字採用的是如下)來備份圖標,但沒能回來到主目錄時,再次拿到漢堡圖標(不包括該代碼,並去了另一種方法是下一部分):瀏覽來來回回從家裏和孩子目錄時

ValueAnimator anim = ValueAnimator.ofFloat(0f, 1f); 
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
    @Override 
    public void onAnimationUpdate(ValueAnimator valueAnimator) { 
     float slideOffset = (Float) valueAnimator.getAnimatedValue(); 
     mDrawerToggle.onDrawerSlide(drawerLayout, slideOffset); 
    } 
}); 
anim.setInterpolator(new DecelerateInterpolator()); 
// You can change this duration to more closely match that of the default animation. 
anim.setDuration(500); 
anim.start(); 

對於漢堡包和後退圖標之間適當的切換,我已經使用this answer(代碼如下)作爲參考逐字,並能夠成功地實現它的家庭和孩子目錄1,2和3功能。

private void enableViews(boolean enable) { 

    if(enable) { 
     mDrawerToggle.setDrawerIndicatorEnabled(false); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     getSupportActionBar().setHomeButtonEnabled(true); // comment this line of code 

     if(!mToolBarNavigationListenerIsRegistered) { 
      mDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        // Doesn't have to be onBackPressed 
        onBackPressed(); 
       } 
      }); 
      mToolBarNavigationListenerIsRegistered = true; 
     } 
    } 
    else { 
     // Remove back button 
     getSupportActionBar().setDisplayHomeAsUpEnabled(false); 
     getSupportActionBar().setHomeButtonEnabled(false); // comment this line of code 

     // Show hamburger 
     mDrawerToggle.setDrawerIndicatorEnabled(true); 
     // Remove the/any drawer toggle listener 
     mDrawerToggle.setToolbarNavigationClickListener(null); 
     mToolBarNavigationListenerIsRegistered = false; 
    } 
} 

來到眼前的問題是:在瀏覽目錄時,切換來來回回從漢堡到返回圖標,動畫部分是不工作的。但是這兩個圖標的狀態都會隨着它們的功能而成功更改。如果您需要更多信息進行故障排除,請告知我們。

+0

你是否開始一個新的活動來顯示子目錄,或者它是與一個新的片段相同的活動? – Dibzmania

+0

@Dibzmania同樣的活動。我只是更新GridView(用Image + Text定製的),我沒有在這個項目中使用任何類型的片段。我只是將互聯網上的文件和有用的文檔放在一起,並在理解解決方案並將其更新爲我的要求後開始工作。不過,我剛剛解決了這個問題,並且我已經更新了未來參考文獻的答案。 –

回答

1

我終於能夠解決它,在用來自Android工作室的默認NavigationBarActivity修改它之後,以更深的方式瞭解了ActionBarDrawerToggle的行爲。

  • mDrawerToggleonDrawerSlide首要由滑動抽屜以阻止漢堡包的動畫是漢堡包的動畫的相同的阻斷的原因在animatior功能箭頭在首位。注意從兩個不同的片這兩行代碼(不包括它較早,但你的想法):

    @Override 
    public void onDrawerSlide(View view, float slideOffset) { 
        // blocks the animation 
        super.onDrawerSlide(view, 0); 
    } 
    
    // from the animator function above 
    mDrawerToggle.onDrawerSlide(drawerLayout, slideOffset); 
    

解決方案:我刪除了overrided onDrawerSlide功能,但隨後,滑動抽屜漢堡包到箭頭動畫也會回來。

Counter-Solution:我還發現漢堡包的箭頭滑動抽屜動畫發生在這條線上:mDrawerLayout.setDrawerListener(mDrawerToggle)這又是一個不推薦的功能。所以我只是評論了這條線,一切都按預期工作。

1

你可以看到導航抽屜活動的工作的例子,如果你只是建立一個新的項目,添加活動和使用模板NavigationDrawer(如果你使用Android工作室。否則下載this repo

當我想學習一個新的佈局,我只是加載模板,然後改變個別的代碼段,直到我有我想要的。通過這種方式,您可以看到什麼是什麼,當您刪除某行以及應該如何完成時停止工作。