material-components / material-components/material-components-android
[AppBarLayout ] AppBarLayout does not support fling dispatch feature when sliding down
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Java
- Sterne
- 17.4k
- Forks
- 3.2k
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
Description: When AppBarLayout slides downwards, HeaderBehavior limits the maximum sliding distance, consumes all the sliding speed, is not distributed, and does not support nested sliding
Expected behavior: AppBarLayout support fling dispatch feature when sliding down
Android API version: 30
Material Library version: 1.5.0-alpha01
Code In HeaderBehavior:
final boolean fling(
CoordinatorLayout coordinatorLayout,
@NonNull V layout,
int minOffset,
int maxOffset,
float velocityY) {
if (flingRunnable != null) {
layout.removeCallbacks(flingRunnable);
flingRunnable = null;
}
if (scroller == null) {
scroller = new OverScroller(layout.getContext());
}
scroller.fling(
0,
getTopAndBottomOffset(), // curr
0,
Math.round(velocityY), // velocity.
0,
0, // x
minOffset,
maxOffset); // y
if (scroller.computeScrollOffset()) {
flingRunnable = new FlingRunnable(coordinatorLayout, layout);
ViewCompat.postOnAnimation(layout, flingRunnable);
return true;
} else {
onFlingFinished(coordinatorLayout, layout);
return false;
}
}
private class FlingRunnable implements Runnable {
private final CoordinatorLayout parent;
private final V layout;
FlingRunnable(CoordinatorLayout parent, V layout) {
this.parent = parent;
this.layout = layout;
}
@Override
public void run() {
if (layout != null && scroller != null) {
if (scroller.computeScrollOffset()) {
setHeaderTopBottomOffset(parent, layout, scroller.getCurrY());
// Post ourselves so that we run on the next animation
ViewCompat.postOnAnimation(layout, this);
} else {
onFlingFinished(parent, layout);
}
}
}
}
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginnen Sie mit der im Bericht gezeigten Implementierung von HeaderBehavior.fling und FlingRunnable unter Verwendung des Kontexts von Android API 30 und Material Library 1.5.0-alpha01. Reproduzieren Sie das Abwärtsgleiten von AppBarLayout und überprüfen Sie, dass die Fling-Geschwindigkeit weitergeleitet statt verbraucht wird, wobei verschachteltes Gleiten unterstützt und die erwartete maximale Distanz beibehalten wird.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- android, java
- Bereich
- mobile
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100