optische Anzeige über navigieren in android
Ich versuche, fügen Sie einige visuelle Anzeige, dass es nicht mehr Seiten in der gewünschten Seitensprung Richtung, in der ViewPager. Aber ich bin kämpfen, um einen Platz zu finden, wo man den relevanten code.
Ich habe versucht, die Erweiterung ViewPager-Klasse mit dem folgenden code, aber der Toast wird nicht angezeigt (ev.getOrientation()
gibt immer 0). Ich habe auch versucht, das gleiche mit der Geschichte Punkte, aber ev.getHistorySize()
gibt auch 0.
Was bin ich?
Klasse Beispiel:
public class CustomViewPager extends ViewPager {
public CustomViewPager(Context context) {
super(context);
}
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
/**
* @see android.support.v4.view.ViewPager#onTouchEvent(android.view.MotionEvent)
*/
@Override
public boolean onTouchEvent(MotionEvent ev) {
boolean result = super.onTouchEvent(ev);
switch (ev.getAction() & MotionEventCompat.ACTION_MASK) {
case MotionEvent.ACTION_MOVE:
if (ev.getOrientation() > 0) {
Toast.makeText(getContext(), "left", 0).show();
}
}
return result;
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn du mal die v4 support library Sie werden sehen, es gibt eine Klasse verwendet, die von ViewPager genannt EdgeEffectCompat (diese sorgt für den glow-Effekt, wenn Sie den Anfang oder das Ende einer view pager in ICS+), Wenn man sich die Umsetzung in die compat-Bibliothek werden Sie sehen, dass es eine if-Anweisung zu sehen, ob die build-version ist 14+ (ICS) oder nicht. Wenn es so ist, dann landet es irgendwann (wenn Sie verfolgen lange genug ist) mit dem normalen EdgeEffect Klasse, war inroduced in ICS. Ansonsten benutzt es BaseEdgeEffectImpl was im Grunde hat sich nichts in ihm.
Wenn Sie möchten, können Sie Ihre eigenen benutzerdefinierten ViewPager verwendet EdgeEffect Ihrer eigenen. Sie können sich auf der android-Quellcode, um zu sehen, wie Sie umgesetzt EdgeEffect hier, die Sie können ziemlich viel kopieren (nur stellen Sie sicher, dass Sie den overscroll_edge und overscroll_glow drawables in die AOSP /res/drawable-Verzeichnisse, um Ihr eigenes Projekt, denn Sie sind intern für android) oder gehen Sie vor und erstellen Sie Ihre eigene version.
Glück.
(By the way, das ist, wie schaffen Sie die cool aussehende Kante tilt-Effekt im launcher-Menü auf ICS... also man kann ziemlich viel sein, so kreativ wie Sie wollen, mit dieser 😉
Ich habe versucht, genau die gleiche Wirkung, dass gefragt wurde, in dieser Frage. Ich mit ihm zu kämpfen und dann lese ich @wnafee Antwort (ich konnte es nicht mit es).
Aber dann ich kämpfen, um das umzusetzen, was vernünftig war ziemlich einfach aus den Antwort.
Ich hatte so viel Mühe mit der Umsetzung, dass ich vielleicht nicht verstehen, die Antwort richtig, aber es waren zu viele Fragen von unzugänglichen APIs, da ich nicht arbeiten in dem gleichen Paket die Kompatibilitäts-Bibliothek.
Nachdem ich versucht, einige Ansätze (keiner von Ihnen ist es gelungen, und Sie waren ziemlich kompliziert) ich ging in eine etwas andere Richtung, und jetzt funktioniert es wie ein Charme. Ich habe einige Reflexion, für diejenigen, die es nie benutzt, keine Sorge, es ist wirklich die grundlegende Reflexion.
Ich bin mir nicht sicher, ob es die beste Lösung, aber es funktionierte für mich, also, wenn Sie möchten, es zu benutzen Sie sind willkommen. Bitte Lesen Sie Wnafee Beispiel, da es erklärt, einige der Sachen, die ich habe.
Um diese Aufgabe ausführen, sollten Sie Folgen Sie einfach meine drei Teile Lösung. (Nehmen Sie zwischen 3-10 Minuten)
Teil I:
Als Wnafee, sagte ich nur aus meiner eigenen EdgeEffect Klasse durch kopieren und einfügen der source-code von hier,
Habe ich nur 2 wirklich kleine änderungen:
EdgeEffectForEarlyVersions
).public class EdgeEffectForEarlyVersions extends EdgeEffectCompat
. Der Grund für diese änderung ist, dass diemLeftEdge
undmRightEdge
sind von der ArtEdgeEffectCompat
.super(context);
. Da es keine default-KonstruktorEdgeEffectCompat
Sie Explizit den Konstruktor aufrufen.Teil II
Außer, dass ich schrieb eine weitere Funktion. Der Zweck der Funktion ist, dass im Falle einer früheren version (vor ICS), würden wir gerne die
EdgeEffectForEarlyVersions
dass wir einfach kopiert. Um diesem Zweck verwendete ich Reflexion.Dies ist die Funktion:
Teil III
Nun nur noch Links zu tun ist, ist zu nennen, dass die Funktion nach der ViewPager-Instanz, und nichts mehr.
Ich Hoffe, es wird jemand helfen.
wnafee erklärt die Lösung gut, aber für die faulen unter uns habe ich mit einer tatsächlichen Arbeitszeit von der Umsetzung schon vor einiger Zeit.
https://github.com/inovex/ViewPager3D
Und wenn Sie wollen einfach nur overscroll werfen Sie einen Blick hier:
https://github.com/inovex/ViewPager3D/issues/1
Haben Sie eine Menge von Optionen, Sie können zeigen, ein Toast, ein Dialogfeld anzuzeigen, machen Sie einen TextView oder Bild über Ihren UI, etc. Oder weil Sie wissen, die Menge der Elemente Anzeigen, die in den ViewPager, man könnte hinzufügen, verschiedene Anzeigen an den Positionen 0 und/oder n + 1 mit der Nachricht und machen es bounce in die Letzte Ansicht, die tatsächlich Ihre Daten enthält.
Du implementieren könntest:
nur zur Ergänzung @goBeepit dev beantworten, wenn Sie erstellen Sie Ihre eigenen edgeffect Klasse, und Sie erstrecken sich von EdgeEffectCompat einige Methoden benötigt, um ein boolescher Wert sein. Sie können ändern Sie die Methoden, um Typ "boolean" und machen dann true zurückgeben, in jedem Fall auf diese Weise funktioniert alles einwandfrei
Können Sie die überlastung der setUserVisibleHint(boolean) - Funktion in Ihre Fragmente. Pseudo-code:
Habe ich nicht verwendet, diese Funktion für diesen Zweck, aber es andere Gründe, und die gilt es Feuer angemessen. Hoffe, das hilft...
Habe ich umgesetzt, ein bounce-back-Effekt, basierend auf Renard ist ViewPager3D: https://stackoverflow.com/a/17425468/973379
In der Regel mit ViewPager, verwendet man einen
PagerAdapter
wieFragmentPagerAdapter
oderFragmentStatePagerAdapter
Flut der ViewPager mit Inhalt(Ihre Inhalte gehen, um die Aussicht auf).Nun, wenn Sie ein
PagerAdapter
haben Sie eine Methode namensgetCount()
, http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html#getCount%28%29 ,die Ihnen die Größe des Inhalts.Da Sie jetzt wissen, die Größe können Sie ganz einfach die Anzeige einer Nachricht mit einer if-Anweisung.
Versuchen, diesen code : http://developer.android.com/reference/android/support/v4/view/ViewPager.html
Hinweis: ich glaube nicht, Sie müssen einen benutzerdefinierten ViewPager. Sie müssen auch verstehen, Fragmente für ViewPager. Betrachten Sie die Proben in ApiDemos. Es ist eine tolle Quelle.