Hier a tutorial, wie mit Scroll-Animation die FAB-Taste verwenden.
Grundsätzlich gilt:
- Verwenden Sie die v22.2.1 Unterstützung v4 Bibliothek gibt es eine
show()
und hide()
Methode, die die Fade-in und Fade-out-Animationen für Floating Action Buttons
- Sie ausführt, muss Ihr Platz
ScrollView
und der FAB in einem CoordinatorLayout.
- die FAB Set
layout_anchor
zum ScrollView's
id
- Erstellen Sie eine Klasse und die
FloatingActionButton.Behavior
Klasse erweitern und an die layout_behavior
Attribut im Layout xml
- außer Kraft setzen Ihr Verhalten Klasse FAB gesetzt
onStartNestedScroll
die vertikale zu prüfen ist
- Überschreiben Sie die Verhaltensklasse
onStopNestedScroll
, um den Parameter (0) FAB) des Kindes hide()
auf downscroll und postDelay a Runnable
aufzurufen, um den FAB nach 2 Sekunden anzuzeigen
Layout wie:
<android.support.design.widget.CoordinatorLayout
... >
<ScrollView
android:id="@+id/myList"
...
/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
app:layout_anchor="@id/myList"
app:layout_behavior="package.CustomScrollAwareBehavior"
...
/>
</android.support.design.widget.CoordinatorLayout>
Ich schlage vor, auch ein Handler
in das Verhalten der Klasse erstellen, um den show()
Methode des FAB zu nennen. Verhaltensklasse wie (nicht getestet):
public class CustomScrollAwareBehavior extends FloatingActionButton.Behavior{
private Handler handler = new Handler();
private FloatingActionButton fab;
public CustomScrollAwareBehavior(Context context, AttributeSet attrs) {
super();
}
@Override
public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout,
FloatingActionButton child, View directTargetChild, View target, int nestedScrollAxes) {
fab = child;
return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL ||
super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target,
nestedScrollAxes);
}
Runnable showRunnable = new Runnable() {
@Override
public void run() {
fab.show();
}
};
@Override
public void onNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child,
View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) {
super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed,
dyUnconsumed);
if (dyConsumed > 0 && child.getVisibility() == View.VISIBLE) {
handler.removeCallbacks(showRunnable);
handler.postDelayed(showRunnable,2000);
child.hide();
}
}
}
Danke !! Ziemlich genaue Antwort, ich werde diese Lösung so schnell wie möglich versuchen. – tothkris