Fix fling gestures when expanding the AppBar from RecyclerView
Fling gestures don't work when expanding the AppBar. Define a new behavior class to fix them https://issuetracker.google.com/issues/37058076 https://stackoverflow.com/a/32454407
This commit is contained in:
@@ -1,2 +1,4 @@
|
|||||||
-keep class android.support.design.widget.** { *; }
|
-keep class android.support.design.widget.** { *; }
|
||||||
-keep interface android.support.design.widget.** { *; }
|
-keep interface android.support.design.widget.** { *; }
|
||||||
|
|
||||||
|
-keep class org.lineageos.updater.ui.FlingBehavior { *; }
|
||||||
|
@@ -11,7 +11,8 @@
|
|||||||
android:id="@+id/app_bar"
|
android:id="@+id/app_bar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:fitsSystemWindows="true">
|
android:fitsSystemWindows="true"
|
||||||
|
app:layout_behavior="org.lineageos.updater.ui.FlingBehavior">
|
||||||
|
|
||||||
<android.support.design.widget.CollapsingToolbarLayout
|
<android.support.design.widget.CollapsingToolbarLayout
|
||||||
android:id="@+id/collapsing_toolbar"
|
android:id="@+id/collapsing_toolbar"
|
||||||
|
43
src/org/lineageos/updater/ui/FlingBehavior.java
Normal file
43
src/org/lineageos/updater/ui/FlingBehavior.java
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
package org.lineageos.updater.ui;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.support.design.widget.AppBarLayout;
|
||||||
|
import android.support.design.widget.CoordinatorLayout;
|
||||||
|
import android.support.v7.widget.RecyclerView;
|
||||||
|
import android.util.AttributeSet;
|
||||||
|
import android.view.View;
|
||||||
|
|
||||||
|
public final class FlingBehavior extends AppBarLayout.Behavior {
|
||||||
|
private static final int TOP_CHILD_FLING_THRESHOLD = 3;
|
||||||
|
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 RecyclerView && velocityY < 0) {
|
||||||
|
final RecyclerView recyclerView = (RecyclerView) target;
|
||||||
|
final View firstChild = recyclerView.getChildAt(0);
|
||||||
|
final int childAdapterPosition = recyclerView.getChildAdapterPosition(firstChild);
|
||||||
|
consumed = childAdapterPosition > TOP_CHILD_FLING_THRESHOLD;
|
||||||
|
}
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user