5

Alles, was ich will, ist eine einfache Animation, wenn der Scrollview bewegt. Ich habe versucht, eine Lösung, aber keiner von ihnen arbeitete perfekt/reibungslos. Wenn ich scroll, möchte ich die Fab mit Slide-Down-Animation ausblenden und wenn nichts passiert nach 2 Sekunden die Fab zeigt mit Slide-up-Animation. Ich weiß, dass es eine grundlegende Frage ist, und ich schätze Ihre Geduld.Android Floating Action Button Animation

Vielen Dank im Voraus.

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; 
    } 
}); 

Antwort

11

Hier a tutorial, wie mit Scroll-Animation die FAB-Taste verwenden.

Grundsätzlich gilt:

  1. 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
  2. Sie ausführt, muss Ihr Platz ScrollView und der FAB in einem CoordinatorLayout.
  3. die FAB Set layout_anchor zum ScrollView'sid
  4. Erstellen Sie eine Klasse und die FloatingActionButton.Behavior Klasse erweitern und an die layout_behavior Attribut im Layout xml
  5. außer Kraft setzen Ihr Verhalten Klasse FAB gesetzt onStartNestedScroll die vertikale zu prüfen ist
  6. Ü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(); 
    } 
    } 
} 
+0

Danke !! Ziemlich genaue Antwort, ich werde diese Lösung so schnell wie möglich versuchen. – tothkris

Verwandte Themen