5

Tutto ciò che voglio è una semplice animazione, quando si muove la scrollview. Ho provato qualche soluzione, ma nessuno di loro ha funzionato perfettamente/senza problemi. Se lo scorrimento, voglio nascondere il fab con animazione slide down e se non succede nulla dopo 2 secondi il fab mostra con animazione slide up. So che è una domanda fondamentale e apprezzo la tua pazienza.Animazione del pulsante di azione mobile Android

Grazie in anticipo.

final ScrollView scroll = (ScrollView) v.findViewById(R.id.sw); 
scroll.setOnTouchListener(new View.OnTouchListener()){ 
    @Override 
    public boolean onTouch(View v, Motionevent event){ 
     int action = event.getAction(); 
     if (action == Motionevent.ACTION_MOVE){ 

     //slide down animation here 

     }else{ 
     new Handler().postDelayed(new Runnable(){ 
      public void run(){ 

      //slide up animation here 

      } 
     }, 2000); 
     } 
    return false; 
    } 
}); 

risposta

11

Ecco a tutorial, come utilizzare il pulsante di FAB con l'animazione di scorrimento.

In sostanza:

  1. 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
  2. è necessario inserire la tua ScrollView e il FAB all'interno di un CoordinatorLayout.
  3. Impostare la FAB layout_anchor al ScrollView'sid
  4. Creare una classe ed estendere la classe FloatingActionButton.Behavior e impostarlo per l'attributo del FAB layout_behavior nel layout xml
  5. override la classe Comportamento onStartNestedScroll per controllare il è verticale
  6. 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(); 
    } 
    } 
} 
+0

Grazie !! Risposta abbastanza precisa, proverò questa soluzione al più presto. – tothkris

Problemi correlati