导航抽屉打开时将mainActivity推到一边

时间:2015-11-09 17:54:19

标签: android

目前,当我的应用中的导航抽屉打开时,它会显示在mainActivity视图的顶部。

我的问题是,是否可以为mainActivity视图设置动画,以便在打开时所述视图的左侧与导航抽屉的右侧匹配?

2 个答案:

答案 0 :(得分:1)

(几乎)总是可行的。但我认为这是一个坏主意,因为它不会跟随ui guidelines from google的Android应用程序。

但是如果你真的想这样做,你有两个选择:

  1. 易。当抽屉打开时,在其余布局上开始动画,并在抽屉关闭时执行相反的动画。它的努力程度较低,但可能效果不佳。

  2. 实施自己的抽屉。您将能够拥有您想要的完美动画和行为。在这种情况下,您可能想要使用片段。主要片段将是内容,另一个片段将是抽屉。当您需要这样做时,您可以使用翻译动画两个片段为"打开"你的抽屉。

  3. 您可以阅读有关动画here的更多信息。

答案 1 :(得分:1)

您需要做的就是在Activity

中使用main_content的setX()

my_activity.xml

<android.support.v4.widget.DrawerLayout
    android:id="@+id/drawer_layout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <!-- The main content view -->
    <RelativeLayout
        android:id="@+id/main_content_rl"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/material_grey_100">
        <include
            layout="@layout/content"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

    </RelativeLayout>

    <!-- The navigation drawer -->
    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:menu="@menu/menu_drawer"/>
</android.support.v4.widget.DrawerLayout>

MyActivity java文件

    mDrawerToggle =
            new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.drawer_open,
                    R.string.drawer_close) {
                @Override
                public void onDrawerSlide(View drawerView, float slideOffset) {
                    float width = drawerView.findViewById(R.id.main_header_rl).getWidth();
                    final int movement= (int) (width * slideOffset);
                    findViewById(R.id.main_content_rl).setX(movement);
                    super.onDrawerSlide(drawerView, slideOffset);
                }
            };
    mDrawerLayout.setDrawerListener(mDrawerToggle);

main_header_rlheader_navigation_drawer

的ID

enter image description here

<RelativeLayout
    android:id="@+id/main_header_rl"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    ...
</RelativeLayout>