2017-01-26 33 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

当我想学习一个新的布局,我只是加载模板,然后改变个别的代码段,直到我有我想要的。通过这种方式,您可以看到什么是什么,当您删除某行以及应该如何完成时停止工作。