Ecco a tutorial, come utilizzare il pulsante di FAB con l'animazione di scorrimento.
In sostanza:
- Utilizzare il supporto delle librerie v4 v22.2.1, c'è un
show()
e hide()
metodo che esegue le animazioni fade-in e fade-out per il galleggiamento Pulsanti di azione
- è necessario inserire la tua
ScrollView
e il FAB all'interno di un CoordinatorLayout.
- Impostare la FAB
layout_anchor
al ScrollView's
id
- Creare una classe ed estendere la classe
FloatingActionButton.Behavior
e impostarlo per l'attributo del FAB layout_behavior
nel layout xml
- override la classe Comportamento
onStartNestedScroll
per controllare il è verticale
- Sostituire la classe Behaviour
onStopNestedScroll
per richiamare il parametro hide()
del parametro child su downscroll e postDelay a Runnable
per mostrare il FAB dopo 2 secondi
di layout come:
<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>
suggerisco, per creare anche una Handler
nella classe Comportamento di chiamare il metodo del FAB show()
. Classe di comportamento come (non testata):
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();
}
}
}
Grazie !! Risposta abbastanza precisa, proverò questa soluzione al più presto. – tothkris