在NavigationView中滚动动画

时间:2016-02-11 11:43:34

标签: android scroll android-animation drawerlayout android-navigationview

我的活动在NavigationView内有DrawerLayout

当用户点击NavigationView标题中的按钮时,我想用动画滚动到DrawerLayout/NavigationView顶部。

看起来NavigationView和DrawerLayout没有提供获取实际滚动位置的方法(getScrollY()getScrollX()总是返回0),所以我不能这样做。

如何使用动画滚动到顶部?

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/drawer_layout"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:fitsSystemWindows="true">

     <!-- My content -->

     <android.support.design.widget.NavigationView
         android:id="@+id/navigation"
         android:layout_width="wrap_content"
         android:layout_height="match_parent"
         android:layout_gravity="start"
         app:headerLayout="@layout/navigation_view_header"
         app:menu="@menu/my_navigation_items" />
 </android.support.v4.widget.DrawerLayout>

2 个答案:

答案 0 :(得分:5)

您需要滚动NavigationMenuView。

在下面的代码中,当点击菜单中的任何项目时,它将滚动到顶部

// try to scroll to the top of the navigation menu, if possible
if (navigationView.getChildCount() > 0) {
    View childView = navigationView.getChildAt(0);
    try {
        Method scroll = childView.getClass().getMethod("smoothScrollToPosition", int.class);
        scroll.invoke(childView, 0);
    } catch (NoSuchMethodException |
            SecurityException |
            IllegalAccessException |
            InvocationTargetException e) {
        Log.d(TAG, "smoothScrollToPosition", e);
    }
}

编辑:如果你想要防止可能发生的变化,你可以在这里使用反射,如下所示:

System(mypath/test.xls)

答案 1 :(得分:0)

您可以简单地将用户smoothScrollToPosition(0)作为NavigationMenuView延伸至RecyclerView

请参阅source code for NavigationMenuView

<强> e.g

 navigationView.smoothScrollToPosition(0);