Swipe / Fling Tab-Änderung in Verbindung mit ScrollView?

Das Beste, was ich auf dieser besonderen Frage finden konnte (obwohl ich keine Galerie verwende): ScrollView und Galerie stören – gibt nicht wirklich eine spezifische Antwort aber. Und meine Implementierung benutzt keine Galerie, offensichtlich.

Springe zum nächsten kühnen Teil für den interessanten Teil

  • Material Design Checkliste: Ausblenden von Bar auf Scroll?
  • Fehler getGoogleAppId fehlgeschlagen mit Status: 10 Android KitKat - GCM und Google Drive
  • (Ionic 2) Es ist ein Fehler aufgetreten, der versucht, auf die Cordova-lib-Ausführung zurückzufallen: TypeError: Kann die Eigenschaft 'then' von undefined nicht lesen
  • Versatzform in einem ShapeDrawable
  • Warum benutzt du NewInstance für DialogFragment anstelle des Konstruktors?
  • Verwenden Sie javap, um Methoden-Signaturen für Android-Aktivität zu erhalten
  • So bekam ich Fling / Swipe / Flick / was auch immer du es nennen willst, um eine Weile her zu arbeiten. Inspiration wurde von ein paar verschiedenen Orten gesammelt, von denen einige "grundlegende Gestenerkennung" hier auf Stack Overflow ( Fling Gestenerkennung im Rasterlayout ), Code Shogun ( http://www.codeshogun.com/blog/2009/04) / 16 / how-to-implement-swipe-action-in-android / ) und Entwickeln von Android ( http://developingandroid.blogspot.com/2009/09/implementing-swipe-gesture.html ), aber ich benutze nicht Ein ViewFlipper in meiner Anwendung. Wenn ein Fling auftritt, ändere ich einfach die Lasche (umschliessend an den Enden).

    Nun, einige meiner Registerkarten enthalten ScrollViews. Diese ScrollViews reagieren offensichtlich auf Aufwärts- / Abwärts-Scrollen, um Ihnen alle Daten in ihr zu zeigen, keine Überraschung dort. Das Problem ist, dass es die "Scroll" -Funktion dieser ScrollViews erscheinen würde überschreiben meine Fling Geste. Ich kann nicht in ein ScrollView (blättern ganz gut), aber es funktioniert einwandfrei außerhalb von ihnen (auf der gleichen Registerkarte, auf andere Ansichten wie TableRow oder was auch immer).

    Ich hatte einen schnellen Blick auf http://blog.velir.com/index.php/2010/11/17/android-snapping-horizontal-scroll/ auch, die eine Möglichkeit zur Implementierung von HorizontalScrollView bietet. Aber es gibt immer noch Gesten durch eine Klasse, die SimpleOnGestureListener (und überschreibt onFling), die die gleiche Implementierung wie ich habe (was mich zu glauben, wird es nicht wirklich helfen) verlängert. Quellcode für ScrollView von Google: http://google.com/codesearch/p?hl=en#uX1GffpyOZk/core/java/android/widget/ScrollView.java&d=3

    Gibt es eine Möglichkeit, meine Implementierung von Swipe und ScrollView mühelos zusammenzuarbeiten?

    Hier liegt das Problem, denke ich. ScrollView.java verwendet auch eine Methode namens onTouchEvent und die Dokumentation für die onTouchEvent for Activity-Zustände:

    "Aufgerufen, wenn ein Touchscreen-Event nicht von einer der darunter liegenden Ansichten behandelt wurde. Dies ist besonders nützlich, um Touch-Events zu verarbeiten, die außerhalb Ihrer Fenstergrenzen passieren, wo es keine Ansicht gibt, um es zu empfangen."

    Also das ScrollView macht das "Override" – was mache ich? Gibt es keinen Weg, um sicherzustellen, dass beide überprüft werden? Mein onTouchEvent, das nicht getroffen wird, wenn das onTouchEvent von der ScrollView behandelt wird:

    @Override /** Used for swipe gestures */ public boolean onTouchEvent(MotionEvent event) { if (gestureDetector.onTouchEvent(event)) return true; else return false; } 

    Mehr allgemeiner Quellcode unten, ist es wahrscheinlich nicht sehr wichtig. Die GestureDetector in meiner Tabs-Klasse mit dem zugehörigen Zuhörer:

      // Gestures gestureDetector = new GestureDetector(new MyGestureDetector()); gestureListener = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (gestureDetector.onTouchEvent(event)) { return true; } return false; } }; 

    Meine Gestenklasse, die eine verschachtelte Klasse meiner Tabs-Klasse ist (die TabActivity erweitert) – es ist die gleiche wie jeder andere Code, den du zu diesem Thema findest:

     /** GestureDetector used to swipe between classes */ class MyGestureDetector extends SimpleOnGestureListener { TabHost tabHost = getTabHost(); @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { try { if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) return false; if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { // my tab code return true; } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { // my tab code return true; } } catch (Exception e) { Log.e("MyGestureDetector onFling", e.toString()); } return false; } } 

  • Android-Implementierung von Lifecycle-Methoden kann die Superclass-Implementierung nach jeder Arbeit anrufen?
  • So erstellen Sie einen einfachen Teiler in der neuen NavigationView?
  • Wie bekomme ich programmatisch eine Liste von Farben von einem Farbverlauf auf Android
  • Listview, das bereits geladene Bilder mit Universal-Image-Loader geladen hat
  • Jsoup erhält Element in Wert = ""
  • Android SDK Installationsordner auf OS X
  • 3 Solutions collect form web for “Swipe / Fling Tab-Änderung in Verbindung mit ScrollView?”

    Ich würde vorschlagen, Sie haben einen Blick auf die Google I / O 2010 App Quellcode, da ihre FlingableTabHost Implementierung scheint, dieses Problem gelöst zu haben:

    http://iosched.googlecode.com/svn/trunk/src/com/google/android/apps/iosched/ui/ScheduleActivity.java

    Ich denke, der Schlüssel ist in der Erweiterung TabHost und überschreibt seine onInterceptTouchEvent Methode.

    Wenn ich schaue, um ein ähnliches Problem zu lösen, das ich habe, stieß ich auf dieses Tid-Bit:

    EventsInterceptionEnabled: Wenn es auf true gesetzt ist, sagt diese Eigenschaft dem Overlay, um die Ereignisse von ihren Kindern zu stehlen, sobald es weiß, dass der Benutzer wirklich eine Geste zeichnet. Dies ist nützlich, wenn es eine scrollbare Ansicht unter dem Overlay gibt, um zu vermeiden, das zugrunde liegende Kind zu scrollen, während der Benutzer seine Geste zieht

    Von der Android Dev-Website spricht man über die Verwendung dieses Attributs in der <android.gesture.GestureOverlayView> Root in deiner Layoutdatei.

    Für was es wert ist, fand ich die onFling-Methode sehr unzuverlässig. Ich überschreibe die onScroll-Methode im SimpleGestureDetector und definiere meine onInterceptTouchEvent als:

     @Override public boolean onInterceptTouchEvent(MotionEvent ev) { //Call super first because it does some hidden motion event handling boolean result = super.onInterceptTouchEvent(ev); if (this.mGestureScanner.onTouchEvent(ev)) return true; return result; } 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.