目前,当我的应用中的导航抽屉打开时,它会显示在mainActivity视图的顶部。
我的问题是,是否可以为mainActivity视图设置动画,以便在打开时所述视图的左侧与导航抽屉的右侧匹配?
答案 0 :(得分:1)
(几乎)总是可行的。但我认为这是一个坏主意,因为它不会跟随ui guidelines from google的Android应用程序。
但是如果你真的想这样做,你有两个选择:
易。当抽屉打开时,在其余布局上开始动画,并在抽屉关闭时执行相反的动画。它的努力程度较低,但可能效果不佳。
实施自己的抽屉。您将能够拥有您想要的完美动画和行为。在这种情况下,您可能想要使用片段。主要片段将是内容,另一个片段将是抽屉。当您需要这样做时,您可以使用翻译动画两个片段为"打开"你的抽屉。
您可以阅读有关动画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_rl
是header_navigation_drawer
<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>