将抽屉图标动画化为 setDisplayHomeAsUpEnabled 上的箭头? [英] Animate drawer icon into arrow on setDisplayHomeAsUpEnabled?

查看:12
本文介绍了将抽屉图标动画化为 setDisplayHomeAsUpEnabled 上的箭头?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 setDisplayHomeAsUpEnabled 来显示箭头而不是抽屉汉堡"图标,但它没有动画或任何东西.相反,它显示了可立即绘制的箭头.

主屏幕:(专辑 1)

当您点按电影时:(专辑 2)

问题是,当我滑动抽屉时,图标的动画效果很好,这让我觉得我可能不应该为此使用 setDisplayHomeAsUpEnabled:(专辑 3)

专辑: http://imgur.com/a/LkXbh

这是我的抽屉切换代码:

 Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);setSupportActionBar(工具栏);drawerAdapter = new DrawerAdapter(this, App.getNavItems(), getSupportFragmentManager());drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);drawerList = (ExpandableListView) findViewById(R.id.left_drawer);//设置 onGroupClick 和 onChildClickdrawerAdapter.setClickEvents(MainActivity.this, drawerLayout, drawerList);drawerList.setAdapter(drawerAdapter);ActionBarDrawerToggle toolbarDrawerToggle = new ActionBarDrawerToggle(这,抽屉布局,工具栏,R.string.drawer_open,R.string.drawer_close){公共无效 onDrawerClosed(查看视图){super.onDrawerClosed(查看);invalidateOptionsMenu();}公共无效 onDrawerOpened(查看视图){super.onDrawerOpened(查看);invalidateOptionsMenu();}};drawerLayout.setDrawerListener(toolbarDrawerToggle);toolbarDrawerToggle.syncState();

我不希望在打开抽屉时动画已经可以工作了.我想在加载特定片段时手动触发动画.我可能没有正确解释自己.

解决方案

我还没有测试过这个,但是你可以通过在 0(抽屉关闭)和 1(抽屉打开)之间设置浮动动画来实现这一点,然后将值传递给 ActionBarDrawerToggle.onDrawerSlide(View, float).我相信这就是切换确定动画切换应该处于什么状态的方式.

这样的事情应该可以工作.

ValueAnimator anim = ValueAnimator.ofFloat(start, end);anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@覆盖public void onAnimationUpdate(ValueAnimator valueAnimator) {float slideOffset = (Float) valueAnimator.getAnimatedValue();toolbarDrawerToggle.onDrawerSlide(drawerLayout, slideOffset);}});anim.setInterpolator(new DecelerateInterpolator());//您可以更改此持续时间以更接近默认动画的持续时间.动画.setDuration(500);动画开始();

I'm using setDisplayHomeAsUpEnabled in order to show the arrow instead of the drawer "burger" icon but it's not getting animated or anything. Instead it shows the arrow drawable instantaneously.

Home screen: (Album 1)

When you tap a movie: (Album 2)

The thing is, the icon does the animation just fine when I slide the drawer, which makes me think that maybe I'm not supposed to use setDisplayHomeAsUpEnabled for this: (Album 3)

Album: http://imgur.com/a/LkXbh

Here's my drawer toggle code:

    Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
    setSupportActionBar(toolbar);

    drawerAdapter = new DrawerAdapter(this, App.getNavItems(), getSupportFragmentManager());
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawerList = (ExpandableListView) findViewById(R.id.left_drawer);

    // Set onGroupClick and onChildClick
    drawerAdapter.setClickEvents(MainActivity.this, drawerLayout, drawerList);
    drawerList.setAdapter(drawerAdapter);

    ActionBarDrawerToggle toolbarDrawerToggle = new ActionBarDrawerToggle(
            this,                 
            drawerLayout,        
            toolbar,             
            R.string.drawer_open, 
            R.string.drawer_close 
    ) {

        public void onDrawerClosed(View view) {
            super.onDrawerClosed(view);
            invalidateOptionsMenu();
        }

        public void onDrawerOpened(View view) {
            super.onDrawerOpened(view);
            invalidateOptionsMenu();
        }
    };
    drawerLayout.setDrawerListener(toolbarDrawerToggle);
    toolbarDrawerToggle.syncState();

EDIT: I want the animation not when opening the drawer, that works already. I would like to manually trigger the animation when I load a specific fragment. I may not have explained myself correctly.

解决方案

I haven't tested this, but you may be able to achieve this by animating a float between 0 (drawer closed) and 1 (drawer open) and then passing the value into ActionBarDrawerToggle.onDrawerSlide(View, float). I believe that's how the toggle determines what state the animated toggle should be in.

Something like this should work.

ValueAnimator anim = ValueAnimator.ofFloat(start, end);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator valueAnimator) {
        float slideOffset = (Float) valueAnimator.getAnimatedValue();
        toolbarDrawerToggle.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();

这篇关于将抽屉图标动画化为 setDisplayHomeAsUpEnabled 上的箭头?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆