2013-07-29 2 views
7

Ich bin auf der Suche nach einer Möglichkeit, um den Benutzern einen Hinweis, dass die Navigationsleiste vorhanden ist.NavigationDrawer Hinweis Animation (wie Google Currents)

Ich mag die Art und Weise, wie Google Currents darauf hinweist, dass es eine nächste Seite gibt, es gleitet nur auf der nächsten Seite ein paar Pixel und entfernt es dann.

Was ist der beste Weg, um eine solche Animation zu erreichen?

Antwort

0

Wenn Sie Ihre eigene benutzerdefinierte ViewGroup implementieren, sollten Sie hierfür ViewDragHelper verwenden. Es kümmert sich um die Verarbeitung der Berührungsereignisse und scrollt bei Bedarf die Ansichten für Sie. Wenn Sie es für Ihre Anforderungen konfiguriert haben, müssen Sie einfach smoothSlideViewTo in Ihrer Schubladenansicht aufrufen, um es an die gewünschte Position scrollen zu lassen.

Here is a nice intro to ViewDragHelper.

Wenn Sie einen DrawerLayout verwenden, können Sie diese Art von Effekt standardmäßig erhalten, wenn der Benutzer den Rand des Bildschirms berührt. Ich glaube nicht, dass Sie es programmgesteuert auslösen können, wenn dies gewünscht wird, da peekDrawer() in einer ebenfalls deklarierten privaten internen ViewDragHelper.Callback-Instanz als privat deklariert wird.

1

Dies zeigt nur einen schmalen Balken auf der linken Seite - wie wenn Sie den Finger auf den Rand gedrückt halten. Ich bin mir nicht sicher, ob dies Google Currents tut, aber ich fand, dass dies eine elegante Möglichkeit ist, einen Hinweis zu geben. Source

protected void peekDrawer() { 
    long downTime = SystemClock.uptimeMillis(); 
    long eventTime = SystemClock.uptimeMillis() + 100; 
    MotionEvent motionEvent = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_DOWN, 0, 100, 0); 
    m_drawerLayout.dispatchTouchEvent(motionEvent); 
    motionEvent.recycle(); 

    new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      long downTime = SystemClock.uptimeMillis(); 
      long eventTime = SystemClock.uptimeMillis() + 100; 
      MotionEvent motionEvent = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_UP, 0, 100, 0); 
      m_drawerLayout.dispatchTouchEvent(motionEvent); 
      motionEvent.recycle(); 
     } 
    }, (long) (1 * DateUtils.SECOND_IN_MILLIS)); //change 1 to however many seconds you wish to display the hint for 
} 
+0

Das ist großartig. Danke für das Teilen! – danijoo

+0

haha ​​keine sorgen, abstimmen vielleicht? – Voy

Verwandte Themen