使用AppBarLayout.Behavior使用NestedScrollView顺利运行AppBarLayout

时间:2016-03-17 05:27:41

标签: android android-appbarlayout nestedscrollview android-nestedscrollview

我有一个AppBarLayout和NestedScrollView。我想要NestedScrollView,只要它向下滚动,AppBarLayout也应该正常展开,而不会在AppBarLayout展开之前停止NestedScrollView;完成第二次飞行/滚动需要完成。

我检查了stackoverflow,发现这个解决方案非常相关,可以使用。但是如果是NestedScrollView,那就是RecyclerView。它位于https://stackoverflow.com/a/32454407/3286489

我基本上接受了代码并稍微改了一下,并用来检查速度> 8000以考虑将AppBarLayout作为下面的代码抛出。

public final class FlingBehavior extends AppBarLayout.Behavior {
    private boolean isPositive;

    public FlingBehavior() {
    }

    public FlingBehavior(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean onNestedFling(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, float velocityX, float velocityY, boolean consumed) {
        if (velocityY > 0 && !isPositive || velocityY < 0 && isPositive) {
            velocityY = velocityY * -1;
        }

        if (target instanceof NestedScrollView && Math.abs(velocityY) > 8000) {
            consumed = false;
        }
        return super.onNestedFling(coordinatorLayout, child, target, velocityX, velocityY, consumed);
    }

    @Override
    public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dx, int dy, int[] consumed) {
        super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed);
        isPositive = dy > 0;
    }
}

这有效,但并不理想。我只想在AppBarLayout上启动(继续)Fling(即返回consumed = false),当NestedScrollView到达它的滚动顶部时。我怎么能在onNestedFling中检查它?

感谢。

2 个答案:

答案 0 :(得分:1)

你应该检查NestedScrollView和NestedScrollingChild

    if (target instanceof NestedScrollView && Math.abs(velocityY) > 8000) {
        consumed = false;
    }


    if (target instanceof NestedScrollingChild && Math.abs(velocityY) > 8000) {
        consumed = false;
    }

答案 1 :(得分:1)

此存储库中的库已解决该问题。

https://developer.android.com/topic/libraries/support-library/setup.html

allprojects {
    repositories {
        jcenter()
        maven {
            url "https://maven.google.com"
        }
    }
}