您的位置:首页 > 移动开发 > Android开发

关于Android使用ActionBarDrawerToggle时导航图标没有动画效果

2017-04-13 14:22 573 查看
今天在查找DrawerLayout的自定义菜单的实现时,偶然发现了ActionBarDrawerToggle这个东西。这个类的用处是,在DrawerLayout被操作,如打开,关闭,或者滑动等行为时接收反馈而执行一定的操作。还有一个功能就是当导航页面切入切出时,导航图标实现动画效果。用过google play的同学应该见过,当左边的导航菜单被唤出的时候,左上角的三道杠的图标会通过动画变成一个向左的箭头,关闭菜单的时候又会从箭头变为三道杠。



很炫酷有木有!于是楼主去找了下攻略。。啊,是教程,知道了大略的做法,这里直接把重要代码贴出来吧

private Toolbar toolbar;
private DrawerLayout mDrawer;
private ActionBarDrawerToggle drawerToggle;

drawerToggle = new ActionBarDrawerToggle(this,mDrawer,toolbar,R.string.drawer_open,R.string.drawer_close){
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
invalidateOptionsMenu();
}

@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
invalidateOptionsMenu();
}
};

mDrawer.addDrawerListener(drawerToggle);
drawerToggle.syncState();


注意对象自己初始化,drawer_open那两个是字符串引用来的,addDrawerListener原来对应的是setDrawerListener,不过现在google已经废弃那个方法了,请使用现在这个。照着做了下,发现不对啊,根本没有动画效果啊!!不过监听导航菜单打开和关闭里面的话,确实是已经成功执行了。在google找了一下,终于是找到问题解决方案了,主要还是drawerToggle.syncState();这句话,不过这样直接用没效果,正确用法是重写onPostCreate方法,如下:

@Override
protected void onPostCreate(@Nullable Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
drawerToggle.syncState();
}
再次运行,成功看到导航图标的动画效果了!

顺带说明,简单的让导航菜单可见的话,默认的是一个箭头,有的同学可能会觉得是不是要先用一个三道杠图标改掉这个图标啊?其实是没有必要的,只要能实现动画效果,箭头图标会自动改成三道杠的。

以上只是解决方法的其中一种,还有一种方法就不贴出来了,有兴趣的同学请自行查看。给出解决楼主问题的传送门:Drawer toggle not working as expected
(icon remains the same)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息