【问题标题】:Change transition of Navigation drawer更改导航抽屉的过渡
【发布时间】:2018-11-27 14:08:18
【问题描述】:

我想打开带有淡入淡出过渡的导航抽屉, 我尝试了大部分事情但没有成功,所以请帮我在导航抽屉上存档这种过渡效果。

我有这种类型的代码。

toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (drawer.isDrawerOpen(Gravity.LEFT)) {
                drawer.closeDrawers();

//                    TransitionManager.beginDelayedTransition(drawer, fadeOut);

            } else {
                drawer.openDrawer(Gravity.LEFT);

//                    TransitionManager.beginDelayedTransition(drawer, fadeIn);
            }
        }
    });

【问题讨论】:

  • 目前尚不清楚您要达到什么效果。您是否希望抽屉根据它的打开程度淡入?或者只是一个定时的淡入淡出,到位?完全不同的东西?

标签: android android-layout android-animation navigation-drawer android-transitions


【解决方案1】:

您可以通过创建以下动画 xml 来创建淡入/淡出动画:

<!-- fade out-->    
<?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/linear_interpolator">
        <alpha
            android:duration="2000"
            android:fromAlpha="1.0"
            android:toAlpha="0.1" >
        </alpha>
    </set>

r

<!--fade in-->
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/linear_interpolator">
   <alpha
        android:duration="2000"
        android:fromAlpha="0.1"
        android:toAlpha="1.0">
    </alpha>
</set>

然后覆盖DrawerLayout.DrawerListeneronDrawerSlide,以便在抽屉式菜单滑动打开/关闭时添加适当的动画。例如:

mDrawerLayout.addDrawerListener(
                new DrawerLayout.DrawerListener() {
                    @Override
                    public void onDrawerSlide(View drawerView, float slideOffset) {
                        // Respond when the drawer's position changes
                        Animation animFadeIn = AnimationUtils.loadAnimation(getApplicationContext(),R.anim.fade_in);
                        drawerView.startAnimation(animFadeIn);
                        }

                    @Override
                    public void onDrawerOpened(View drawerView) {
                        // Respond when the drawer is opened
                    }

                    @Override
                    public void onDrawerClosed(View drawerView) {
                        // Respond when the drawer is closed
                    }

                    @Override
                    public void onDrawerStateChanged(int newState) {
                        // Respond when the drawer motion state changes
                    }
                }
        );

【讨论】:

  • 它工作了,谢谢,但我也想删除幻灯片动画。
  • 检查这个答案:stackoverflow.com/a/38065786/10300673 它解释了如何在没有动画的情况下关闭抽屉。你可以用 open 做同样的事情。
  • 我试过了,但抽屉被幻灯片动画关闭了
  • 请告诉我如何用淡出动画关闭抽屉
  • 您是要拖动抽屉并在其关闭时淡出,还是只需单击抽屉按钮并使其淡出而不向屏幕一侧移动?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-02
  • 1970-01-01
相关资源
最近更新 更多