Как удалить эффект отскакивания на панели приложений?
Appbar имел обыкновение иметь проблемы при бросании. Прокрутка шла не гладко.
Пожалуйста, обратитесь к этим:
- /questions/7484492/otbrasyivanie-s-recyclerview-appbarlayout
- 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'
Тем не менее, панель приложений теперь отскакивает, даже если бросить не сложно.
Как мне убрать это поведение?
1 ответ
Это происходит только тогда, когда AppBar
прокручивается / бросается в то время как NestedScrollView
(или же RecyclerView
) еще не закончила бросать.
Решение: Расширить AppBar по умолчанию Behavior
и заблокировать вызов для AppBar.Behavior's 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