Visuelle Anzeige von über Scroll in Android

Ich versuche, einige visuelle Indikation hinzuzufügen, dass es keine weiteren Seiten in der gewünschten Fling Richtung in der ViewPager gibt. Allerdings kämpfe ich, um einen Platz zu finden, wo man relevanten Code setzt.

Ich habe versucht, die ViewPager-Klasse mit folgendem Code zu erweitern, aber der Toast wird nicht ev.getOrientation() gibt immer 0 zurück). Ich habe auch das gleiche mit History-Punkten versucht, aber ev.getHistorySize() gibt auch 0 zurück.

  • So entfernen Sie Materialschatten von ToggleButton?
  • Wie können wir die Datenbindung für Switch-Taste für onCheckedChageListener-Event implementieren?
  • Einstellen von Android: windowBackground to @null macht das Scrollen zum Abstrich?
  • Was sind die Einschränkungen und Nachteile von Phonegap oder HTML5 im Vergleich zu denen von Android
  • Wie kann man Text in Android ein- und ausblenden?
  • So öffnen Sie die Navigationsschublade ohne Aktionsleiste, öffnen Sie mit einem Knopf
  • Was vermisse 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; } } 

  • Ndk build und .so datei erstellen android
  • Ist es möglich, die Benutzer älterer App-Versionen zu aktualisieren?
  • Wie kann ich die Internet-Geschwindigkeit in meiner Android-Anwendung bestimmen
  • Erkennung des Mangels an Rückfahrkamera
  • Java.exe beendet mit Nicht-Null-Exit-Wert 2 in Android Studio
  • Android 4.0 Sub-Titel (Abschnitt) Label Styling
  • 8 Solutions collect form web for “Visuelle Anzeige von über Scroll in Android”

    Wenn du die v4-Unterstützungsbibliothek betrachtest, wirst du sehen, dass es eine Klasse gibt, die von ViewPager namens EdgeEffectCompat verwendet wird (dies gibt den Glow-Effekt, wenn du den Anfang oder das Ende eines View-Pagers in ICS + erreichst.) Wenn du die Implementierung in der Compat-Bibliothek siehst, Wird sehen, dass es eine if-Anweisung hat, um zu sehen, ob die Build-Version 14+ (ICS) ist oder nicht. Wenn es so ist, dann endet es schließlich (wenn man lange genug spürt ) mit der normalen EdgeEffect- Klasse, die in ICS eingeführt wurde. Ansonsten nutzt es BaseEdgeEffectImpl, das grundsätzlich nichts darin hat.

    Wenn du willst, kannst du deinen eigenen eigenen ViewPager machen, der EdgeEffect von deinem eigenen verwendet. Sie können sich den Android-Quellcode anschauen, um zu sehen, wie sie EdgeEffect hier implementiert haben , die Sie so ziemlich kopieren können (einfach nur darauf achten, die overscroll_edge und overscroll_glow drawables in den AOSP / res / drawable Verzeichnissen zu Ihrem eigenen Projekt zu kopieren, da sie intern zu android sind ) Oder gehen Sie vor und erstellen Sie Ihre eigene Version.

    Viel Glück.

    (By the way, das ist, wie sie die cool aussehende Kante Kipp-Effekt in der Launcher-Menü auf ICS … so können Sie so ziemlich so kreativ wie Sie wollen mit diesem;

    Ich habe versucht, genau die gleiche Wirkung zu bekommen, die in dieser Frage gefragt wurde. Ich kämpfe damit und dann lese ich @wnafee Antwort (ich konnte es nicht mit ihm aus).

    Aber dann kämpfe ich um das zu klären, was aus der Antwort ganz einfach war. Ich hatte so viel Mühe, es zu implementieren, dass ich die Antwort nicht richtig verstehen konnte, aber es gab zu viele Probleme von unzugänglichen APIs, da ich nicht im selben Paket der Kompatibilitätsbibliothek arbeitete.

    Nachdem ich einige Ansätze ausprobiert hatte (keiner von ihnen gelang es, und sie waren ziemlich kompliziert) ging ich in eine etwas andere Richtung, und jetzt funktioniert es wie ein Charme. Ich habe etwas Reflexion, für diejenigen, die es nie benutzt haben, keine Sorge, es ist wirklich das Grunde der Reflexion.

    Ich bin mir nicht sicher, ob es die beste Lösung da draußen ist, aber es hat für mich gearbeitet, also wenn du es gerne benutzt hättest, dann bist du willkommen. Bitte lesen Sie Wnafee Beispiel, da es einige der Sachen erklärt, die ich tat.

    Um diese Aufgabe zu erreichen, solltest du einfach meiner 3-teiligen Lösung folgen. (Bringt Sie zwischen 3-10 Minuten)

    Teil I:

    Als Wnafee sagte, ich habe gerade meine eigene EdgeEffect Klasse durch Kopie fügen Sie den Quellcode von hier aus ,

    (Achten Sie darauf, die overscroll_edge und overscroll_glow drawables in den AOSP / res / drawable Verzeichnissen zu Ihrem eigenen Projekt zu kopieren, da sie intern zu android sind)

    Ich habe nur 2 sehr kleine Änderungen gemacht:

    1. Ich erkläre, dass die Klasse EdgeEffectCompat erweitert (ich habe meine Klasse EdgeEffectForEarlyVersions ). public class EdgeEffectForEarlyVersions extends EdgeEffectCompat . Der Grund für diese Änderung ist, dass die mLeftEdge und mRightEdge vom Typ EdgeEffectCompat .
    2. In der ersten Zeile des Konstruktors von "meiner" neuen Klasse habe ich einen Aufruf zum übergeordneten Konstruktor super(context); hinzugefügt super(context); . Da es keinen Standard-Konstruktor zu EdgeEffectCompat gibt, muss man den Konstruktor explizit anrufen.

    Teil II

    Außerdem habe ich die andere Funktion geschrieben. Der Zweck der Funktion ist, dass im Falle einer frühen Version (vor ICS) möchten wir die EdgeEffectForEarlyVersions , die wir gerade kopiert haben. Um diesen Zweck zu bekommen, verwendete ich Reflexion.

    Dies ist die Funktion:

     private static void changeEdgeEffectCompactOnEarlyVersions(ViewPager viewPager, Context context) { /* In case that the version is earlier than 14 there is only empty implementation for the edge effect, therefore we change it. * for more information look on the following links: * 1. http://stackoverflow.com/questions/10773565/visual-indication-of-over-scroll-in-android * 2. http://grepcode.com/file/repo1.maven.org/maven2/com.google.android/support-v4/r7/android/support/v4/view/ViewPager.java#ViewPager.0mLeftEdge * 3. http://grepcode.com/file/repo1.maven.org/maven2/com.google.android/support-v4/r7/android/support/v4/widget/EdgeEffectCompat.java#EdgeEffectCompat */ if (Build.VERSION.SDK_INT < 14) { try { Class<ViewPager> viewPagerClass = ViewPager.class; //Get the left edge field, since it is private we used getDeclaredField and not getDeclared Field leftEdge = viewPagerClass.getDeclaredField("mLeftEdge"); leftEdge.setAccessible(true); //Get the right edge field, since it is private we used getDeclaredField and not getDeclared Field rightEdge = viewPagerClass.getDeclaredField("mRightEdge"); rightEdge.setAccessible(true); EdgeEffectForEarlyVersions leftEdgeEffect = new EdgeEffectForEarlyVersions(context); EdgeEffectForEarlyVersions rightEdgeEffect = new EdgeEffectForEarlyVersions(context); //Set the mLeftEdge memeber of viewPager not to be the default one, but to be "our" edgeEffect leftEdge.set(viewPager, leftEdgeEffect); //Set the mRightEdge memeber of viewPager not to be the default one, but to be "our" edgeEffect rightEdge.set(viewPager, rightEdgeEffect); } catch (Exception ex) { Log.e("refelection", ex.getMessage()); } } } 

    Teil III

    Jetzt ist alles da noch zu tun, ist, diese Funktion zu nennen, nachdem du die ViewPager Instanz hast und nichts mehr.

    Ich hoffe, es wird jemandem helfen.

    Wnafee erklärte die lösung gut, aber für die faulen unter uns, machte ich eine eigentliche funktionierende Umsetzung schon vor einiger Zeit.

    https://github.com/inovex/ViewPager3D

    Und wenn du nur overscroll willst, dann schau mal hier

    https://github.com/inovex/ViewPager3D/issues/1

    Sie haben eine Menge von Optionen, können Sie einen Toast zeigen, einen Dialog anzeigen, eine Textansicht oder ein Bild erstellen, um über Ihre Benutzeroberfläche zu erscheinen usw. Oder weil Sie die Anzahl der Ansichtselemente im ViewPager kennen, können Sie verschiedene Ansicht an Positionen hinzufügen 0 und / oder n + 1 mit der Nachricht und machen es auf die letzte Ansicht, die tatsächlich Ihre Daten enthält.

    Sie könnten implementieren:

     viewPager.setOnPageChangeListener(new OnPageChangeListener() { public void onPageSelected(int position) { //TODO If position is the 0 or n item, add a view at 0 or at n+1 to indicate there is no more pages with data. } public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { // TODO Show a Toast, View or do anything you want when position = your first/last item; } public void onPageScrollStateChanged(int state) { } }); 

    Einfach zu ergänzen @goBeepit dev Antwort, wenn Sie Ihre eigene edgeffect Klasse erstellen und Sie von EdgeEffectCompat verlängern einige Methoden erfordert boolean. Du kannst diese Methoden auf den Booleschen Typ umstellen und dann in jedem Fall echt zurückkehren. So funktioniert alles gut

    Sie können die setUserVisibleHint (boolean) Funktion in Ihren Fragmenten überladen. Pseudocode:

      void setUserVisibleHint(boolean isVisibleToUser) { // If this fragment is becoming visible if (isVisibleToUser == true) { // Check if it is the last fragment in the viewpager if (indexOfThis == getActivity().indexOfLast) { // Display right limit reached Toast(..., "No more Frags to right",...) } // Check if it is the first fragment in the viewpager else if (indexOfThis == getActivity().indexOfFirst) { // Display Left Limit reached Toast(..., "No more Frags to left",...) } } } 

    Ich habe diese Funktion zu diesem Zweck nicht benutzt, aber habe es aus anderen Gründen benutzt und es passiert passend. Hoffe das hilft…

    Ich habe einen Bounce-Back-Effekt implementiert, der auf Renards ViewPager3D basiert: https://stackoverflow.com/a/17425468/973379

    In der Regel mit ViewPager verwendet man einen PagerAdapter wie FragmentPagerAdapter oder FragmentStatePagerAdapter , um den ViewPager mit Inhalt zu überschwemmen ( Ihre Inhalte werden Ansichten ).

    Nun, wenn Sie einen PagerAdapter , haben Sie eine Methode namens getCount() , http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html#getCount%28%29 , die geben wird Sie die Größe des Inhalts.

    Da Sie jetzt wissen, die Größe können Sie leicht eine Nachricht mit einem if-Control-Anweisung anzeigen.

    Versuchen Sie diesen Code: http://developer.android.com/reference/android/support/v4/view/ViewPager.html

    Hinweis: Ich denke nicht, dass du einen benutzerdefinierten ViewPager brauchst. Du musst auch Fragmente für ViewPager verstehen. Schauen Sie sich die Beispiele in ApiDemos an. Es ist eine großartige Quelle.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.