如何使用RecyclerView.OnScrollListener移动视图,同时保持旋转健全?

时间:2015-10-09 09:05:51

标签: android android-layout android-animation android-recyclerview onscrolllistener

我有一个带有RecyclerView的布局(简单的垂直列表)。当列表向上滚动时,一些视图(包括Recyclerview)随之移动并粘在屏幕顶部。向下滚动,它们向下移动直到它们返回到初始位置。他们的translationY与列表向上或向下滚动的数量有关。

问题是,我有一个静态的横向布局,所以旋转会为布局做各种奇怪的事情。我该如何防止这种情况?换句话说,如何将视图保留在setTranslationY范围内?

布局:

<LinearLayout
    android:id="@+id/rootLayout"
    ...
    >
    <Some other stuff/>

    <RelativeLayout
        android:id="@+id/containerLayout"
        >
        ...  contains things ... 
    </RelativeLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        />
</LinearLayout>

代码:

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);

        scrollY = scrollY - dy  //  float, to keep the total vertical scroll amount 
        final int maxTop = rootLayout.getTop()  //  Maximum translationY allowed, sticky to top
        containerLayout.setTranslationY(maxTop > scrollY ? maxTop : scrollY)  //  if it reached the top, stay there
        recyclerView.setTranslationY(maxTop > scrollY ? maxTop : scrollY)  //  the same
    }

这很好用。问题是当我旋转设备时,由于回收者的视图行为,布局会移动到古怪的位置或者完全脱离屏幕。

任何帮助都会受到赞赏,我在这里失去了理智。

0 个答案:

没有答案