如何去除 appbar 的弹跳效果?
How do I remove the bouncing effect on appbar?
Appbar 曾经在 fling 时出现问题。滚动不流畅。
请参考这些:
- https://code.google.com/p/android/issues/detail?id=177729&q=appbarlayout&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars
- https://github.com/henrytao-me/smooth-app-bar-layout
但它已在支持库版本 26 中修复。
compile 'com.android.support:design:26.0.0'
但是,即使 fling 不难,appbar 现在也会反弹。
如何消除这种行为?
只有当 AppBar
为 scrolled/flung 而 NestedScrollView
(或 RecyclerView
)尚未完成投掷时才会发生这种情况。
解决方法:扩展AppBar的默认Behavior
,阻塞对AppBar.Behavior的onNestedPreScroll()
和onNestedScroll()
的调用,当AppBar
在 NestedScroll 尚未停止时被触摸。
@Override
public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dx, int dy, int[] consumed, int type) {
if (type == TYPE_FLING) {
isFlinging = true;
}
if (!shouldBlockNestedScroll) {
super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed, type);
}
}
@Override
public void onNestedScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int type) {
if (!shouldBlockNestedScroll) {
super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed, type);
}
}
然后在布局上使用它:
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar"
...
app:layout_behavior="com.mypackage.NoBounceBehavior"/>
参考 可在此处找到自定义行为的完整代码:https://gist.github.com/ampatron/9d56ea401094f67196f407f82f14551a
Appbar 曾经在 fling 时出现问题。滚动不流畅。
请参考这些:
- https://code.google.com/p/android/issues/detail?id=177729&q=appbarlayout&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars
- https://github.com/henrytao-me/smooth-app-bar-layout
但它已在支持库版本 26 中修复。
compile 'com.android.support:design:26.0.0'
但是,即使 fling 不难,appbar 现在也会反弹。
如何消除这种行为?
只有当 AppBar
为 scrolled/flung 而 NestedScrollView
(或 RecyclerView
)尚未完成投掷时才会发生这种情况。
解决方法:扩展AppBar的默认Behavior
,阻塞对AppBar.Behavior的onNestedPreScroll()
和onNestedScroll()
的调用,当AppBar
在 NestedScroll 尚未停止时被触摸。
@Override
public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dx, int dy, int[] consumed, int type) {
if (type == TYPE_FLING) {
isFlinging = true;
}
if (!shouldBlockNestedScroll) {
super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed, type);
}
}
@Override
public void onNestedScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int type) {
if (!shouldBlockNestedScroll) {
super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed, type);
}
}
然后在布局上使用它:
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar"
...
app:layout_behavior="com.mypackage.NoBounceBehavior"/>
参考 可在此处找到自定义行为的完整代码:https://gist.github.com/ampatron/9d56ea401094f67196f407f82f14551a