簡體   English   中英

漢堡箭頭動畫無法以編程方式工作

[英]Hamburger to arrow animation not working programmatically

我已經制作了一個服務器目錄瀏覽應用程序,它將改變Activity本身內容。 我一直在添加一個功能: Navigation Drawer和處理Toolbar上的漢堡包后退圖標,如下所示:

  • 主目錄:
    1. 漢堡圖標作為默認狀態。
    2. 在點擊漢堡包或滑動手勢時滑動導航抽屜。
    3. 當抽屜滑動時, 漢堡包 沒有狀態變化或動畫。
    4. 選擇目錄時, 漢堡包的動畫圖標
  • 任何子目錄:
    1. 上一個動畫的后退按鈕,其唯一目的是轉到父目錄。
    2. 將滑動手勢滑動導航抽屜。
    3. 返回圖標任何狀態變化或動畫時,抽屜使用手勢或滑動時,它進入這個目錄的另一個孩子的目錄。
    4. 當使用后退圖標或onBackPressed返回主目錄時, 后箭頭到漢堡圖標的動畫。

我可以使用這個答案獲取漢堡包的動畫圖標(代碼用於逐字使用如下)但是當回到主目錄時無法再次獲得漢堡圖標(沒有包含該代碼和采取另一種方法,這是下一部分)

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();

為了在家庭和兒童目錄中來回瀏覽時,漢堡包和背面圖標之間的適當切換,我已經使用這個答案 (代碼如下所示)作為參考,並且能夠成功地實現家庭和家庭的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;
    }
}

即將到來的問題是:在瀏覽目錄時,從漢堡到后退切換圖標,動畫部分根本不起作用。 但兩個圖標的狀態都隨着其功能而成功更改。 如果您需要更多信息進行故障排除,請與我們聯系。

如果您只是創建一個新項目,添加活動並使用模板NavigationDrawer (如果您使用Android Studio,則可以看到導航抽屜活動的工作示例。否則,請下載此repo

當我想學習一個新的布局時,我只需加載模板,然后更改單個代碼片段,直到我得到我想要的內容。 通過這種方式,您可以看到什么做什么,什么在刪除某些行時停止工作以及應該如何完成。

我終於能夠解決它,在使用Android工作室的默認NavigationBarActivity進行修補后,以更深入的方式了解了ActionBarDrawerToggle的行為。

  • onDrawerSlidemDrawerToggle的覆蓋以阻止滑動抽屜的漢堡包動畫是導致在動畫功能中首先阻止漢堡包動畫到箭頭的原因。 請注意兩個不同代碼中的這兩行(之前沒有包含它,但是你明白了):

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

解決方案:我刪除了覆蓋的onDrawerSlide函數,但隨后,滑動抽屜漢堡包到箭頭動畫也會回來。

反解決方案:我還發現由於這一行,漢堡包的滑動抽屜動畫發生了: mDrawerLayout.setDrawerListener(mDrawerToggle) ,這又是一個不推薦使用的函數。 所以我只是評論了這一行,一切都按預期工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM